裸的网络流,不过可能有重边,要把容量相加 代码: #include<iostream> using namespace std; int f[205][205],cap[205][205]; int rc[205],pre[205],q[205]; int n,m,ans; bool bfs() { int i,j,head=0,tail=1; memset(rc,0,sizeof(rc)); pre[1]=-1; rc[1]=99999999; q[tail]=1; while(head<tail) { i=q[++head]; for(j=1;j<=m;j++) { if(cap[i][j]>f[i][j]&&!rc[j]) { rc[j]=rc[i]; if(cap[i][j]-f[i][j]<rc[i]) rc[j]=cap[i][j]-f[i][j]; pre[j]=i; q[++tail]=j; if(j==m) return true; } } } return false; } void update() { for(int i=m;i!=1;i=pre[i]) { f[pre[i]][i]+=rc[m]; f[i][pre[i]]=-f[pre[i]][i]; } ans+=rc[m]; } void EK() { while(bfs()) update(); } int main() { int i,j,a,b,w; while(scanf("%d %d",&n,&m)!=EOF) { memset(f,0,sizeof(f)); memset(cap,0,sizeof(cap)); for(i=1;i<=n;i++) { scanf("%d %d %d",&a,&b,&w); cap[a][b]+=w; } ans=0; EK(); printf("%d/n",ans); } return 0; }