为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。
Sgu/194
来自NOCOW
< Sgu
#include<stdio.h> #include<string.h> const int maxn=250,maxm=40050,big=100000000; int n,m,e[maxm][3],fl[maxn][maxn]={0},de[maxn][2]={0}; int d[maxn]={0},gap[maxn]={0}; inline int min(int xx,int yy) {return xx<yy?xx:yy;} int sap(int x,int flow) { int i,p,t=flow; if(x==n+1) return flow; for(i=1;i<=n+1;i++) if(d[x]==d[i]+1&&fl[x][i]) { p=sap(i,min(t,fl[x][i])); fl[x][i]-=p,fl[i][x]+=p; if(!(t-=p)) return flow; } if(!(--gap[d[x]])) d[0]=n+2; ++gap[++d[x]]; return flow-t; } int main() { #ifndef ONLINE_JUDGE freopen("data.in","r",stdin); #endif int i,x,y,li,ci,z=0; scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%d%d%d%d",&x,&y,&li,&ci); fl[x][y]=ci-li; de[x][1]+=li,de[y][0]+=li; e[i][0]=ci,e[i][1]=x,e[i][2]=y; } for(i=1;i<=n;i++) if(de[i][0]>de[i][1]) fl[0][i]=de[i][0]-de[i][1]; else fl[i][n+1]=de[i][1]-de[i][0]; for(gap[0]=n+2;d[0]<n+2;) sap(0,big); for(i=1;i<=n;i++) if(fl[0][i]) {printf("NO\n"),z=1;break;} if(!z) { printf("YES\n"); for(i=0;i<m;i++) printf("%d\n",e[i][0]-fl[e[i][1]][e[i][2]]); } return 0; } <./source>