封鎖陽光大學(洛谷 1330)

2022-05-14 16:59:36 字數 1368 閱讀 4928

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

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

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

輸入格式:

第一行:兩個整數n,m

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

輸出格式:

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

輸入樣例#1:

【輸入樣例1】

3 31 2

1 32 3

【輸入樣例2】

3 21 2

2 3

輸出樣例#1:

【輸出樣例1】

impossible

【輸出樣例2】

1

【資料規模】

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

/*

一看這道題沒有什麼思路,就打了暴力,20分,然而輸出impossible 就40分,(>_

一看正解,很簡單的樣子,因為要求一條邊上的兩個點不能同時選,那我們就給每個點附上標記,1代表選,-1代表不選,類似於染色問題,如果一條邊上的點都是同一標記,則impossible,否則,統計出選或不選中少的那個即為答案。

注意,圖不一定是連通圖,所以要多dfs幾遍。

*/#include

#include

#define n 10010

#define m 100010

using

namespace

std;

intn,m,head[n],vis[n],flag,t1,t2;

struct

node

;node e[m*2

];void add(int i,int x,int

y)void dfs(int

x)

else

if(vis[e[i].v]==vis[x])

}int

main()

int ans=0

;

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

if(!vis[i])

if(flag)

printf("%d

",ans);

return0;

}

view code

封鎖陽光大學 洛谷1330 bfs

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

洛谷1330 封鎖陽光大學 DFS or BFS

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

洛谷 P1330 封鎖陽光大學

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