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

2021-08-04 11:11:51 字數 1642 閱讀 2332

題目描述

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

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

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

輸入格式:

第一行:兩個整數n,m

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

輸出格式:

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

【輸入樣例1】

3 31 2

1 32 3

【輸入樣例2】

3 21 2

2 3

【輸出樣例1】

impossible

【輸出樣例2】

1

染色問題,下面放上dfs和bfs的**。

1 #include2

using

namespace

std;

3int a[200000];4

intn,m;

5 vector v[100000];6

bool book[200000];7

int t[2];8

int ans=0;9

10bool dfs(int

from,int

judge)

1126}27

28return1;

29}3031

32int

main()

3343

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

4455 ans+=min(t[0],t[1

]);56}57

58}59 cout60return0;

61 }

1 #include2

using

namespace

std;

3int a[200000];4

intn,m;

5 vector v[100000];6

int book[200000];7

int ans=0;8

intt1,t2;

9 queueq;

1011

int bfs(int

k)12

32else

if(book[v[x][j]]==book[x])

33 34}

35}36if(judge%2) t1+=k;

37else t2+=k;38}

39return

min(t1,t2);40}

4142

intmain()

4353

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

5463 ans+=ok;64}

65}66 cout67return0;

68 }

洛谷P1330 封鎖陽光大學 DFS

題解參照 這是一題特殊的搜尋題,搜尋和染色結合。注意事項如下 一 資料可能給的不連通 要重新遍歷每乙個點,並且需要乙個used陣列表示有沒有搜尋過這個點。二 這乙個dfs其實不需要回溯,因為染色的情況是唯一確定的,這樣可以快很多。三 對於不連通的每一部分圖,應該分別計算並且相加結果。四 還要注意題目...

洛谷P1330 封鎖陽光大學 dfs

題目 題意 乙個無向邊,乙個河蟹可以占領乙個點,但乙個點只能被乙個河蟹占領。占領了乙個點之後,這個點所有的邊都刪除。問至少需要多少個河蟹可以讓所有的邊都被刪除。思路 乍一看有點無從下手。但實際上這個題就是乙個將圖上的點進行黑白著色的問題。如果乙個點被著了黑色,那麼他的鄰接點都要被著白色。這道題給的圖...

封鎖陽光大學(洛谷 1330)

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