description兩派人分別向源或匯連邊,朋友之間連雙向邊,然後求最小割。幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神。雖然每個人都有自己的主見,但是為了照顧一下自己朋友的想法,他們也可以投和自己本來意願相反的票。我們定義一次投票的衝突數為好朋友之間發生衝突的總數加上和所有和自己本來意願發生衝突的人數。
我們的問題就是,每位小朋友應該怎樣投票,才能使衝突數最小? input
第一行只有兩個整數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不會重複。
output 只需要輸出乙個整數,即可能的最小衝突數。
s和t代表兩個陣營,之間的割就是衝突數。另外,如果有乙個人改變陣營,還要再付出一條割的代價。
#include
#include
#include
using namespace std;
const int
s=305,t=306,oo=0x3f3f3f3f;
int fir[310],ne[600010],to[600010],w[600010],n,m,tot,f[310],que[310];
void add(int u,int v,int
x)bool bfs()
}return f[t];
}int dfs(int u,int lim)
if (!ret) f[u]=0;
return ret;
}int main()
while (m--)
while (bfs())
while (x=dfs(s,oo))
ans+=x;
printf("%d\n",ans);
}
bzoj1935 Shoi2007 園丁的煩惱
有n個點座標為 xi,yi m次詢問,詢問 a,b c,d 的矩形內有多少點。0 n 500000,1 m 500000,0 xi,yi 10000000 看完資料範圍傻眼系列。做法 離線處理 因為這個範圍肯定不能把x y都離散,所以只把點和詢問的y座標放在一起都離散化,然後一起按x座標排序,再開乙...
SHOI2007 善意的投票
這個題一開始看到資料範圍和只能選0或者1的時候,直接就想到了網路流.可是想到費用流上了。但是之後發現這個題並不能用費用流做。因為雖然代價可以轉化成費用,但是流量並不是可以確定限制的。先把圖轉化成二分圖 s連選0的,1連t。乙個人只能有兩種選擇,選了乙個另外乙個就不需要付出代價了 最小割。我們用流量表...
SHOI2007 書櫃的尺寸
有一些書放到三層書架上,滿足每層至少一本,最小化 s left sum 3 max h i right times left max 3 sum t i right 其中 n leq 70,h i leq 300,t i leq 30 這資料範圍誰會想到這麼暴力啊 顯然動態規劃,由於高度最值放下標不...