題目描述
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。
陽光大學的校園是一張由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】染色問題,下面放上dfs和bfs的**。impossible
【輸出樣例2】
1
1 #include2using
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 #include2using
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條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...