源点向起点连边,终点向汇点连边。 点点之间连边,一条是流量无限不花钱的,一条是流量为1花钱的 最大费用最大流即可。 By:大奕哥 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=25005,inf=1e9; 4 int d[N],head[N],cnt=-1,a,b,P,Q,num,p[105][105],cost,f[N],s,t; 5 bool v[N]; 6 struct node{ 7 int w,to,nex,c,f; 8 }e[1000005]; 9 void add(int x,int y,int w,int c) 10 { 11 e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;e[cnt].f=x;e[cnt].w=w;e[cnt].c=c; 12 e[++cnt].to=x;e[cnt].nex=head[y];head[y]=cnt;e[cnt].f=y;e[cnt].w=0;e[cnt].c=-c; 13 } 14 queue<int>q; 15 bool spfa() 16 { 17 memset(d,0x3f,sizeof(d)); 18 memset(v,0,sizeof(v)); 19 memset(f,-1,sizeof(f));