time limit: 10 sec memory limit: 128 mb
submit: 484 solved: 332
[submit][status]一
參與者都將發言,闡述自己的看法。參與者的心裡都有乙個看法,比如firedancer認為切爾西不可能奪冠,而waterdancer認為切爾西一定問
鼎。但是因為waterdancer是firedancer的好朋友,所以可能firedancer為了遷就自己的好朋友,會在發言中支援切爾西。也就是
說每個參與者發言時闡述的看法不一定就是心裡所想的。現在告訴你大家心裡的想法和參與者的朋友網,希望你能安排每個人的發言內容,使得違心說話的人的總數
與發言時立場不同的朋友(對)的總數的和最小。
第一行兩個整數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 3
2 31
最好的安排是所有人都在發言時說切爾西不會奪冠。這樣沒有一對朋友的立場相左,只有第1個人他違心說了話。
題解:冠軍調查=善意的投票
對於互相排斥的連容量1的雙向邊,對於支援0的,從s連到它一條1,對於支援1的,從它到t連一條1,求最大流。
考慮每對不在同一集合裡的朋友,他們對最小割的貢獻就是1,考慮說了違心話的人,對最小割的貢獻也是1。
**:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #includeview code10 #include11 #include
12#define inf 1000000000
13#define maxn 500
14#define maxm 150000
15#define eps 1e-10
16#define ll long long
17#define pa pair18
#define for0(i,n) for(int i=0;i<=(n);i++)
19#define for1(i,n) for(int i=1;i<=(n);i++)
20#define for2(i,x,y) for(int i=(x);i<=(y);i++)
21#define for3(i,x,y) for(int i=(x);i>=(y);i--)
22using
namespace
std;
23 inline int
read()
2427
while(ch>='
0'&&ch<='9')
28return x*f;29}
30int n,m,s,t,maxflow,tot=1
,a[maxn],b[maxn],head[maxn],cur[maxn],h[maxn],q[maxn];
31struct edgee[maxm];
32void ins(int x,int y,int z)
33void insert(int x,int y,int z)
34bool
bfs()
3546}47
return h[t]!=-1;48
}49int dfs(int x,int
f)50
61if(!used) h[x]=-1;62
return
used;63}
64void
dinic()
6571}72
intmain()
7382
for1(i,m)
8387
dinic();
88 printf("
%d\n
",maxflow);
89return0;
90 }
BZOJ2768 JLOI2010 冠軍調查
題目大意 題面講的這麼清晰明白 具體思路 最小割 建立超級源匯點,希望切爾西贏的從s向它連容量為1的邊,希望切爾西輸的從它向t連容量為1的邊。在朋友之間連一條雙向邊,答案就是最小割。如果存在一條從s到t的路徑,相當於產生了衝突。必須說謊 割掉到s或t的邊 或者與朋友意見不統一 割掉和朋友的邊 ac ...
BZOJ 2768 冠軍調查
link solution 一道比較基礎的最大流的題目 一般看到將點分為兩類的題目就要往網路流方向想吧 建圖 源點向每個初始立場為1的人連權值為1的邊。每個初始立場為0的人向匯點連權值為1的邊。好朋友之間互相連權值為1的邊。最小割即是答案。要滿足要求且總和最小,就不能讓任何一對 1,0 關係成立,這...
BZOJ 2768 冠軍調查(最小割)
題意 給出乙個無向圖,每個點有乙個值0或者1。現在重新設定每個點的值0或者1。設重新設定後的點與原來的點有x個點的值不一樣 重新設定後有y條邊 u,v 使得u和v的值不同。最小化x y。思路 若初始值為1則原點向其連邊 否則其向匯點連邊。對於邊 u,v u和v的值不同,則連邊。求最小割。若左側被割到...