模板題
首先把下界去掉(連邊upper-lower
然後記錄每個點至少要流出的和流入的流量(下界
然後流入大於流出的連向tt,流出大於流入的連向ss(補流
然後跑最大流,如果sum=flow,就代表加上的邊滿流,有答案,否則沒有
#include #include #include #include #include #define int long long
using namespace std;
const int maxn = 20100;
const int inf = 0x3f3f3f3f;
struct edge;
vectorg[maxn];
vectoredges;
int n,m,d[maxn],sumx,lower[maxn],ss,tt,vis[maxn],dep[maxn],cur[maxn],id[50000];
void addedge(int u,int v,int cap));
edges.push_back((edge));
int cnt=edges.size();
g[u].push_back(cnt-2);
g[v].push_back(cnt-1);
}void addedge(int u,int v,int cap,int lower)
int dfs(int x,int a)
}return flow;
}queueq;
bool bfs(void)}}
return vis[tt];
}int dinic(void)
return flow;
}signed main()
ss=maxn-2;
tt=maxn-3;
for(int i=1;i<=n;i++)
else
}int max_flow=dinic();
// printf("sumx=%lld maxflow=%lld\n",sumx,max_flow);
if(sumx==max_flow)
else
return 0;
}
loj 115 無源匯有上下界可行流
參考部落格 模型 乙個網路,求出乙個流,使得每條邊的流量必須 li且 hi,每個點必須滿足總流入量 總流出量 流量守恆 這個流的特點是迴圈往復,無始無終 這個演算法是有上下界網路流演算法的基礎,只要深刻理解這個演算法其他演算法也就水到渠成,因此我用大篇幅力圖將這個演算法的思想和細節闡述清楚.可行流演...
loj 115 無源匯有上下界可行流
這是一道模板題。n 個點,m 條邊,每條邊 e 有乙個流量下界 text e 和流量上界 text e 求一種可行方案使得在所有點滿足流量平衡條件的前提下,所有邊滿足流量限制。第一行兩個正整數 n m 之後的 m 行,每行四個整數 s t text text 如果無解,輸出一行no。否則第一行輸出y...
無源匯可行流 模板LOJ 115
自個設個源點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過程...