P1330 封鎖陽光大學 二著色

2021-09-19 10:29:23 字數 895 閱讀 8218

一開始以為這是個連通圖,卡了一會兒。後來看了錯誤資料才忽然反應過來這圖不一定連通。

思路:相鄰兩點一定有且只有乙個河蟹,所以可以將有河蟹點看作黑色,沒有的點看作白色,轉化成乙個二著色問題。

然後對於每個連通分量進行二著色,並記錄第i次著色後對應連通分量裡的黑白點個數,將較小值加入答案變數中。

#include

#include

#include

#include

using

namespace std;

const

int maxn=

10000+10

;const

int black=-1

;const

int white=1;

const

int none=0;

vector<

int> g[maxn]

;int color[maxn]

;int cnt[maxn]

;int n,m;

int blacknum=

0,whitenum=0;

bool

bipartite

(int u)

else

if(color[v]

==color[u]

)return

false;}

return

true;}

intmain()

int ans=0;

for(

int i=

1;i<=n;i++

) ans+

=min

(blacknum,whitenum);}

} cout

}

P1330 封鎖陽光大學

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...

P1330 封鎖陽光大學

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...

P1330 封鎖陽光大學

依題意可知,在圖中的每一條邊有且只有乙個點被選中 阻止老曹刷街 那麼就可以對其採取二分圖染色,一條邊中 乙個點為黑色,另乙個點為白色 如果一條邊中的兩個端點的顏色相同,則說明無解,輸出 ipossible 如果有解,就把白點的數目和黑點的數目取 min 即為答案。include include in...