題目:
題意:乙個無向邊,乙個河蟹可以占領乙個點,但乙個點只能被乙個河蟹占領。
占領了乙個點之後,這個點所有的邊都刪除。
問至少需要多少個河蟹可以讓所有的邊都被刪除。
思路:
乍一看有點無從下手。但實際上這個題就是乙個將圖上的點進行黑白著色的問題。
如果乙個點被著了黑色,那麼他的鄰接點都要被著白色。
這道題給的圖可能是乙個森林,並且著色其實兩個顏色可以對換。所以對於每乙個連通塊,至少應該有的河蟹數是兩個顏色中較少的那個。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12
13#define inf 0x7fffffff
14using
namespace
std;
15 typedef long
long
ll;16 typedef pairpr;
1718
intn, m;
19const
int maxn = 10005;20
const
int maxm = 1e5 + 5;21
intcol[maxn];
22int head[maxn], to[maxm * 2], nxt[maxm * 2
];23
int tot = 1;24
25void add(int x, int
y)26
3435
int cnt[5
];36
bool dfs(int c, int
x)37
41else
if(col[x])return
true
;42 col[x] =c;
43 cnt[c]++;
44for(int i = head[x]; i; i =nxt[i])
48return
true;49
}5051int
main()
5259
bool flag = true;60
int ans = 0;61
for(int i = 1; i <= n; i++)
67else71}
72}73if(!flag)
76else
79 }
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...
洛谷 P 1330 封鎖陽光大學
題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...