無源匯可行流 模板LOJ 115

2021-09-28 17:43:29 字數 949 閱讀 7517

自個設個源點s,匯點t,每個點 du[i]=入度-出度。

du[i]>0時 加邊s->i,邊權為du[i]

du[i]<0時 加邊i->t,邊權為 -du[i]

設sum為所有》0的du[i]的和

求s->t的最大流,如果maxflow==sum,則存在可行流,此時每條邊流掉的流量+它原本的下界就是實際的流量

dfs過程中某個點可能被多次訪問,這個點的某些表可能在其他地方走過了,當前弧優化就可以略過這種邊

#includeusing namespace std;

#define inf (1e18)

typedef long long ll;

const ll maxn=205,maxm=50205;

ll n,m,s,t,sum,cnt;

ll l[maxm],head[maxn];//注意l是maxm

struct nodee[maxm];

void add(ll u,ll v,ll w);head[u]=cnt++;

e[cnt]=(node);head[v]=cnt++;

}queueq;

ll d[maxn];

ll cur[maxn];

ll bfs()

}return d[t];

}ll dfs(ll u,ll remain)

}if(!use) d[u]=-1;

return use;

}ll dinic()

}return ans;

}ll du[maxn];

int main()

for(ll i=1;i<=n;i++)

ll tmp=dinic();

if(tmp!=sum) printf("no\n");

else}}

return 0;

}

loj 115 無源匯有上下界可行流

參考部落格 模型 乙個網路,求出乙個流,使得每條邊的流量必須 li且 hi,每個點必須滿足總流入量 總流出量 流量守恆 這個流的特點是迴圈往復,無始無終 這個演算法是有上下界網路流演算法的基礎,只要深刻理解這個演算法其他演算法也就水到渠成,因此我用大篇幅力圖將這個演算法的思想和細節闡述清楚.可行流演...

LOJ 115 無源匯有上下界可行流

模板題 首先把下界去掉 連邊upper lower 然後記錄每個點至少要流出的和流入的流量 下界 然後流入大於流出的連向tt,流出大於流入的連向ss 補流 然後跑最大流,如果sum flow,就代表加上的邊滿流,有答案,否則沒有 include include include include inc...

loj 115 無源匯有上下界可行流

這是一道模板題。n 個點,m 條邊,每條邊 e 有乙個流量下界 text e 和流量上界 text e 求一種可行方案使得在所有點滿足流量平衡條件的前提下,所有邊滿足流量限制。第一行兩個正整數 n m 之後的 m 行,每行四個整數 s t text text 如果無解,輸出一行no。否則第一行輸出y...