BZOJ 1934 善意的投票 最小割

2022-05-15 19:06:40 字數 1378 閱讀 7472

time limit: 1 sec  memory limit: 64 mb

submit: 2354  solved: 1471

[submit][status][discuss]

幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神。雖然每個人都有自己的主見,但是為了照顧一下自己朋友的想法,他們也可以投和自己本來意願相反的票。我們定義一次投票的衝突數為好朋友之間發生衝突的總數加上和所有和自己本來意願發生衝突的人數。 我們的問題就是,每位小朋友應該怎樣投票,才能使衝突數最小?

第一行只有兩個整數n,m,保證有2≤n≤300,1≤m≤n(n-1)/2。其中n代表總人數,m代表好朋友的對數。檔案第二行有n個整數,第i個整數代表第i個小朋友的意願,當它為1時表示同意睡覺,當它為0時表示反對睡覺。接下來檔案還有m行,每行有兩個整數i,j。表示i,j是一對好朋友,我們保證任何兩對i,j不會重複。

只需要輸出乙個整數,即可能的最小衝突數。

3 31 0 0

1 21 3

3 21

在第乙個例子中,所有小朋友都投贊成票就能得到最優解

小朋友的衝突就是割,然後這道題要求的就是最小的割。。。

從源點向剛開始為1的點連邊,從每個剛開始為0的點向匯點連邊,每條邊容量為1。。。

然後每一對好朋友之間加一條雙向邊,容量為1。。。

都是套路。。。都是套路。。。

#include#include#include#include#include#define inf 1000000000

#define n 10000

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}char ch;

int n,m,s,t,ans;

int cnt=1;

int hed[n],h[n],q[n];

struct edgee[300000];

void insert(int u,int v,int w)

bool bfs()

}return h[t]!=-1;

}int dfs(int x,int f)

if(!used) h[x]=-1;

return used;

}void dinic()

int main()

else

} for(int i=1;i<=m;i++)

dinic();

printf("%d\n",ans);

return 0;

}

this passage is made by iscream-2001.

BZOJ 1934 善意的投票

題目大意 幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神。雖然每個人都有自己的主見,但是為了照顧一下自己朋友的想法,他們也可以投和自己本來意願相反的票。我們定義一次投票的衝突數為好朋友之間發生衝突的總數加上和所有和自己本來意願發生衝突的人...

BZOJ1934Vote 善意的投票

1934 shoi2007 vote 善意的投票 time limit 1 sec memory limit 64 mb submit 1574 solved 960 description 幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神...

最小割1 善意的投票

幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神。雖然每個人都有自己的主見,但是為了照顧一下自己朋友的想法,他們也可以投和自己本來意願相反的票。我們定義一次投票的衝突數為好朋友之間發生衝突的總數加上和所有和自己本來意願發生衝突的人數。我們的...