输出的时候发现不会对原来的矩阵排序,只好重新搞了一储存边的一维数组,然后排序。
#include
using namespace std; const int N=256; const int inf=0x7fffffff; struct type { int b,c,f; int no; }; struct node { int no,f; }g[20000+5]; int cmp(node a,node b) { return a.no
Q; Q.push(s); while(!Q.empty()&&flag[t]==-1) { u=Q.front(); Q.pop(); for(i=s; i<=t; i++) { if(flag[i]!=-1) continue; if(network[u][i].c
network[i][u].b) { flag[i]=0; p[i]=u; a[i]=min(a[u],network[i][u].f-network[i][u].b); Q.push(i); } } flag[u]=1; } if(flag[t]==-1||a[t]==0) break; int k1=t,k2=p[k1]; while(1) { if(network[k2][k1].f
sum1) AccEdge[0][i].c=sum2-sum1,AccEdge[0][i].b=AccEdge[0][i].f=0; else AccEdge[i][n+1].c=sum1-sum2,AccEdge[i][n+1].b=AccEdge[i][n+1].f=0; } for(i=1; i<=n; i++) for(j=1; j<=n; j++) if(AccEdge[i][j].c!=inf) { AccEdge[i][j].c=AccEdge[i][j].c-AccEdge[i][j].b; AccEdge[i][j].b=0; } Ford(AccEdge,0,n+1); bool ok=1; for(i=0; i<=n+1; i++) { if(AccEdge[0][i].c!=inf&&AccEdge[0][i].f!=AccEdge[0][i].c) ok=0; } if(!ok) printf(NO ); else { int tp=0; printf(YES ); for(i=1; i<=n; i++) for(j=1; j<=n; j++) if(Edge[i][j].c!=inf) { Edge[i][j].f=AccEdge[i][j].f+Edge[i][j].b; g[tp].f=Edge[i][j].f; g[tp].no=Edge[i][j].no; tp++; } sort(g,g+tp,cmp); for(i=0;i