BZOJ 2768 冠軍調查 最小割

2022-05-20 09:24:22 字數 1433 閱讀 3305

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行...