好題!一開始沒想到,看了題解之後發現其實這樣的增廣方法以前是見過的,每次增加乙個結點,然後跑最大流看是否能繼續增廣,直到不能增廣為止,我記得poj2391也是這樣的增廣方法,不過那個是二分答案每次重新建圖求最大流.
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=10010,inf=0x3f3f3f3f;
int m,n,te,sz,s,t;
int vis[n],matching[n],p[n],can[n],cur[n],head[n],d[n],num[n];
struct edgee[100010];
queue
q;void add(int u,int v,int cap)
void insert(int u,int v,int cap)
int augment()
x=t;
while(x!=s)
return a;
}void bfs()
q.pop();
}}int isap()
int ok=0;
for (int i=cur[x];i;i=e[i].next)
}if (!ok)
}return flow;
}int main()
n-=2;k-=2;
for (int i=3;i<=n;i+=2)
}cout
cout
<}
}}
魔術球問題
列舉放的球,先假設新建柱子,拆成兩個點,第乙個點連s,表示後面還可以放 第二個連t表示放到其他柱子上 再列舉放過的數和它是否組成完全平方數,列舉的數的第乙個點向它的第二個點連邊,表示這個球可以放到其他球上,容量都為一 每次跑最大流出來的表示會消掉的柱子個數,如果此時球 消去的比n大則break輸出答...
魔術球問題
題目描述 題解 個人認為網路流二十三題中比較有意思的一道。先列舉球數。每加乙個球,從 s 向 xi 連一條容量為 1 的邊,從 yi 向 t 連一條容量為 1 的邊。然後從 xi 向滿足 i j 為完全平方數的 yj 連容量為 1 的邊。在殘餘網路上跑 ek 或 dinic 如果得到的最大流為 0 ...
魔術球問題
曾經在模擬賽的時候做過弱化版,不需要輸出方案。其實加強版因為資料範圍很小,模擬做也未嘗不可,暴力算出n 55時最終答案也只有1567,拿二維陣列存一下方案即可。當然,這個題是由網路流做法的,雖然我的網路流做法只是模擬了乙個貪心的過程。貪心的正確性證明就請移步我的弱化版題解好啦 對於乙個球,有兩種放法...