自個設個源點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...