题目详情 - L2-013 红色警报 (25 分) (pintia.cn)
一开始想的是并查集,太难维护了,直接用dfs跑会比较简单。
#include<iostream>
#include<cstring>
using namespace std;
const int N=550;
int g[N][N];
bool st[N];
int n,m;
void dfs(int v) {
st[v]=true;
for(int i=0; i<n; i++)
if(!st[i]&&g[v][i]==1) dfs(i);
}
int block() {
int num = 0;
memset(st,0,sizeof st);
for(int i=0; i<n; i++) {
if(!st[i]) {
num++;
dfs(i);
}
}
return num;
}
int main()
{
cin>>n>>m;
while(m--) {
int a,b;
cin>>a>>b;
g[a][b] = g[b][a] = 1;
}
int num = block();
int k; cin>>k;
for(int i = 0; i &