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