按照題意,每個頂點要不放河蟹,要不不放河蟹,而且相連的頂點不能具有相同的狀態。因此我們可以將其抽象成二分圖,即兩種相連的頂點不能染成相同的顏色,對於每乙個連通圖,我們使用兩種顏色通過dfs將其染色,只要有乙個連通圖不能染色成功,就直接得到結果「no」,因為題中可能含有多個連通圖,對第i個連通圖,我用2i和2i+1表示兩種顏色,這個連通圖放的河蟹數就是用這兩種顏色染成的頂點數最小的那種顏色的數量,即min(用2i染的頂點數量,用2i+1染的頂點數量),最後每乙個連通圖求和就是最後的答案
#pragma gcc optimize(2)
#include
using namespace std;
#define pi acos(-1.0)
#define e exp(1.0)
typedef
long
long ll;
const ll maxn=
1e5+7;
ll n,m,col[
10007];
vectorv[
10007];
bool flag;
ll ku;
mapma;
void
dfs(ll u,ll k)
//將頂點u染成k
else;}
return;}
intmain()
flag=1;
ku=0;
for(i=
1;i<=n;i++)}
if(!flag)
//有乙個連通圖不能成功染色
ll cnt=
0,jie=0;
for(i=
1;i<=n;i++
) ma[col[i]]++
;//將用每一種顏色染色的頂點數求出來
for(i=
1;i<=ku;i++
) cout
}
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...
洛谷 P 1330 封鎖陽光大學
題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...