time limit: 10 sec memory limit: 128 mb
submit:
971 solved: 661
[submit][status][discuss]
第一行兩個整數n和m,其中n(2≤n≤300)表示參與者的總數,m(0≤m≤n(n-1)/2)表示朋友的總對數。
第二行n個整數,要麼是0要麼是1。如果第i個整數的值是0的話,表示第i個人心裡認為切爾西將與冠軍無緣,如果是1的話,表示他心裡認為切爾西必將奪魁。
下面m行每行兩個不同的整數,i和j(1≤i,
j≤n)表示i和j是朋友。注意沒有一對朋友會在輸入中重複出現。朋友關係是雙向的,並且不會傳遞。
只有乙個整數,為最小的和。
3 31 0 0
1 21 32 3
1最好的安排是所有人都在發言時說切爾西不會奪冠。這樣沒有一對朋友的立場相左,只有第1個人他違心說了話。
比較簡單的最小割
設s集合為支援集,t集合為不支援集
對於所有支援的人,被s連;所有不支援的人,向t連
朋友之間互相連
容量全部為1
#include#include#include
#include
#include
#include
using
namespace
std;
intread()
while (ch>='
0' && ch<='
9')
return x*f;
}#define maxn 1010
#define maxm 1000010
struct edgenodeedge[maxm];
int head[maxn],cnt=1
,s,t;
void add(int u,int v,int w)
void insert(int u,int v,int w)
intn,m;
intcur[maxn],h[maxn];
#define inf 0x7fffffff
bool
bfs()
return h[t]!=-1
;
}int dfs(int loc,int
low)
if (!used) h[loc]=-1
;
return
used;
}int
dinic()
return
tmp;
}int
main()
for (int x,y,i=1; i<=m; i++)
printf(
"%d\n
",dinic());
return0;
}
BZOJ 2768 冠軍調查(最小割)
題意 給出乙個無向圖,每個點有乙個值0或者1。現在重新設定每個點的值0或者1。設重新設定後的點與原來的點有x個點的值不一樣 重新設定後有y條邊 u,v 使得u和v的值不同。最小化x y。思路 若初始值為1則原點向其連邊 否則其向匯點連邊。對於邊 u,v u和v的值不同,則連邊。求最小割。若左側被割到...
BZOJ 2768 冠軍調查
link solution 一道比較基礎的最大流的題目 一般看到將點分為兩類的題目就要往網路流方向想吧 建圖 源點向每個初始立場為1的人連權值為1的邊。每個初始立場為0的人向匯點連權值為1的邊。好朋友之間互相連權值為1的邊。最小割即是答案。要滿足要求且總和最小,就不能讓任何一對 1,0 關係成立,這...
bzoj2768 網路流 最小割 冠軍調查
description input 第一行兩個整數n和m,其中n 2 n 300 表示參與者的總數,m 0 m n n 1 2 表示朋友的總對數。第二行n個整數,要麼是0要麼是1。如果第i個整數的值是0的話,表示第i個人心裡認為切爾西將與冠軍無緣,如果是1的話,表示他心裡認為切爾西必將奪魁。下面m行...