本文主要是介绍【无源汇的上下界网络流】【模板】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上界改容量,下界先流走。
U -> V之间添加一条 cap - down的边
S->U 为U多出来的入的下界- 出的下界
V -> T 为V多出来的出的下界-入的下界
Max_Flow<int> MF;
int n,m;
const int maxn = 210;
const int maxm = 40010;
int a[maxn];
int id[maxm];
int up[maxm],down[maxm];
int main()
{freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while(scanf("%d%d",&n,&m) != EOF){memset(res,0,sizeof(res));MF.Init(n+4,1,2);memset(a,0,sizeof(a));int u,v;for(int i=0;i<m;i++){scanf("%d%d%d%d",&u,&v,&down[i],&up[i]);a[u] -= down[i];a[v] += down[i];id[i] = E^1; MF.Add_edge(u,v,up[i]-down[i]);}int sum = 0;for(int i=1;i<=n;i++){if(a[i] > 0) {MF.Add_edge(0,i,a[i]);sum += a[i];}else if(a[i] < 0) MF.Add_edge(i,n+1,-a[i]);} MF.Changenst(n+2,0,n+1); if(MF.Dinic() < sum) printf("NO\n"); else{printf("YES\n");for(int i=0;i<m;i++){printf("%d\n",down[i]+res[i]);}}}return 0;
}
这篇关于【无源汇的上下界网络流】【模板】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!