luoguP1330 封鎖陽光大學 黑白染色

2021-07-28 16:10:32 字數 1707 閱讀 4407

題目描述

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。

陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上刷街了。非常悲劇的一點是,河蟹是一種不和諧的生物,當兩隻河蟹封鎖了相鄰的兩個點時,他們會發生衝突。

詢問:最少需要多少只河蟹,可以封鎖所有道路並且不發生衝突。

輸入輸出格式

輸入格式:

第一行:兩個整數n,m

接下來m行:每行兩個整數a,b,表示點a到點b之間有道路相連。

輸出格式:

僅一行:如果河蟹無法封鎖所有道路,則輸出「impossible」,否則輸出乙個整數,表示最少需要多少只河蟹。

輸入輸出樣例

輸入樣例#1:

【輸入樣例1】

3 3

1 2

1 3

2 3【輸入樣例2】

3 2

1 2

2 3輸出樣例#1:

【輸出樣例1】

impossible

【輸出樣例2】 1說明

【資料規模】

1<=n<=10000,1<=m<=100000,任意兩點之間最多有一條道路。

【bfs】

#include

#include

#include

#include

#include

#include

#define maxn 10010

using

namespace

std;

int n,m;

vector

edges[maxn];

int vis[maxn];

int f(int u)else }}

if(!can) break;

if(index%2) re1+=k;

all+=k;

}if(!can) return -1;

return min(all-re1,re1);

}int main()

memset(vis,0,sizeof(vis));

int re=0;

for(int i=1;i<=n;i++)

re+=u;}}

printf("%d",re);

return

0;}

【dfs】

#include

#include

#include

using

namespace

std;

vector

g[10003];

bool vis[10003];

int a[10003];

int t[2];

bool dfs(int u,int col)

}return

true;

}int main()

int ans=0;

for (i=1;i<=n;i++)

if (!vis[i])

ans+=min(t[0],t[1]);

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

return

0;}

luogu P1330 封鎖陽光大學

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

luogu P1330 封鎖陽光大學

emmmm 下午被dtx大佬強迫 用詞似乎不當?去做 他tql!然鵝最終還是他給我講的www 所以這其實是一道圖的遍歷 但是我有搜尋恐懼症啊啊啊看到搜尋整個人都慌了 而且看題面 這道題還有乙個仔細想想就能想出來的點 就是每一條邊的兩個點,一定是乙個有河蟹,乙個沒有的 所以標記一下就比較好判斷了 然後...

luogu P1330 封鎖陽光大學

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