题目描述
阿斯罗菲克帝国南疆毗邻幽暗森林,其中虫豸横行。
帝宫总管萨拉温格探查发现,虫族似乎已经在森林中建立了 n 个据点,在这些据点之间还有 m 条道路 (双向道路) 供虫族通行。萨拉温格还发现,若 k 个据点之间两两相连,且这 k 个据点与其它任何一个据点都没有道路相连,则这 k 个据点中必然居住了一名虫族大祭司。不论这个 k 是多少,哪怕 k=1,也一定有一名大祭司。
请问总共有几名大祭司。
输入格式
第一行两个整数 n 和 m,接下来 m 行每行两个整数表示一条已经存在的路径。
输出格式
输出一行一个整数,表示大祭司的数量。
样例输入
6 4
0 1
0 2
1 2
3 4
样例输出
3
0-1-2,3-4,5 各有一名大祭司。
样例输入
6 5
0 1
0 2
1 2
3 4
3 5
样例输出
1
0-1-2 有一名大祭司。
数据规模
1≤n≤100
我的代码
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0,sum,vis[200005];
vector<int>v[200005];
void dfs(int x){
vis[x]=1;
for(int i=0;i<v[x].size();i++){
int nx=v[x][i];
if(sum==nx){
ans++;
}
if(vis[nx]==1){
continue;
}
dfs(nx);
}
}
int main(){
cin>>n>>m;
for(int i=1,x,y;i<=m;i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=0;i<n;i++){
if(vis[i]==0 && v[i].size()==0){
ans++;
}
else if(vis[i]==0 && v[i].size()==1){
sum=i;
dfs(i);
}
}
cout<<ans;
return 0;
}