QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#187122 | #3855. Regional development | wind_whisper# | WA | 0ms | 3688kb | C++14 | 2.0kb | 2023-09-24 14:45:58 | 2023-09-24 14:45:59 |
Judging History
answer
#include <stdio.h>
#define ll long long
#define MN 100010
#define MM 100010
#define inf 99999999
int fr[MN],ne[MM],v[MM],w[MM],li[MM],bs=0,dy[MN];
void add(int a,int b,int c)
{
v[bs]=b;
w[bs]=c;
ne[bs]=fr[a];
fr[a]=bs++;
}
void addb(int a,int b,int c)
{
add(a,b,c);
add(b,a,0);
}
bool bk[MN];int jl[MN],S,T,N,dl[MN];
bool bfs()
{
for(int i=1;i<=N;i++)
bk[i]=0,jl[i]=inf;
bk[S]=1;int he=0,ta=1;
dl[0]=S,jl[S]=0;
while(he<ta)
{
int u=dl[he++];
for(int i=fr[u];i!=-1;i=ne[i])
{
if(w[i]>0&&!bk[v[i]])
{
bk[v[i]]=1;
jl[v[i]]=jl[u]+1;
dl[ta++]=v[i];
}
}
}
return jl[T]<inf;
}
int dfs(int u,int z)
{
if(u==T)return z;
for(int &i=dy[u];i!=-1;i=ne[i])
{
int t=v[i];
if(jl[t]==jl[u]+1&&w[i]>0)
{
int rt=dfs(t,z<w[i]?z:w[i]);
if(rt!=-1)
{
w[i]-=rt;li[i]+=rt;w[i^1]+=rt;
return rt;
}
}
}
return -1;
}
int dinic()
{
int jg=0;
while(bfs())
{
for(int i=1;i<=N;i++)dy[i]=fr[i];
while(1)
{
int rt=dfs(S,inf);
if(rt==-1)break;
jg+=rt;
}
}
return jg;
}
int cz[MN];
int main()
{
int n,m,M;
scanf("%d%d%d",&n,&m,&M);
for(int i=1;i<=n+2;i++)fr[i]=-1;
N=n+2;S=N-1;T=N;
for(int i=0;i<m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cz[a]-=c;cz[b]+=c;
addb(b,a,1);
}
int nd=0;
for(int i=1;i<=n;i++)
{
int t=cz[i]/M;
if(t>0)addb(S,i,t),nd+=t;
else if(t<0)addb(i,T,-t);
}
int rt=dinic();
if(rt<nd)
{
printf("IMPOSSIBLE\n");
return 0;
}
for(int i=0;i<m;i++)
{
int t=li[i*2]-li[i*2+1];
printf("%d\n",-t*M);
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3688kb
input:
10 23 3 2 10 1 2 6 1 6 9 1 7 9 1 6 7 1 3 6 1 1 3 1 1 6 2 6 10 1 2 9 1 4 9 2 4 7 2 3 10 2 3 9 1 6 8 1 7 8 2 3 5 1 5 9 1 8 9 2 3 8 2 1 5 2 1 4 1 5 10 2
output:
-3 0 0 0 0 0 -3 0 0 0 -3 0 -3 -3 0 0 0 -3 0 -3 -3 0 0
result:
wrong answer weight could not be 0