題目描述
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。
陽光大學的校園是一張由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,任意兩點之間最多有一條道路。
1/*2比較明顯的染色問題
3但是對邊染色比較麻煩
4所以我們換乙個角度來考慮
5先dfs遍歷一遍 求出深度
6再dfs第二遍判斷
7如果染了乙個奇數點 那麼所有奇數點都染完才能封鎖大學
8偶數同理9*/
10 #include11 #include12 #include13 #include14
#define maxn 10010
15using
namespace
std;
16 vectorv[maxn];
17 vectore;
18int
n,m,x,y,depth[maxn],cnt,tot;
19bool
vis[maxn],f;
20 inline void read(int&x)
23while(c>='
0'&&c<='
9')
24 x=x*f;25}
26 inline void dfs(int
x) 34}35
return;36
}37 inline void dfs2(int
x) 44
else
45if(depth[v]>depth[x])
46dfs2(v);47}
48return;49
}50intmain()
57 memset(depth,127/3,sizeof
depth);
58 depth[1]=0;59
for(int i=1;i<=n;i++) 65}
66int ans=0;67
for(int i=e.size()-1;i>=0;i--)
75 ans=ans+min(tot,cnt);76}
77 printf("
%d\n
",ans);
78return0;
79 }
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...
洛谷 P 1330 封鎖陽光大學
題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...