虫族据点WA90分 向各位大佬求助

题目描述

阿斯罗菲克帝国南疆毗邻幽暗森林,其中虫豸横行。

帝宫总管萨拉温格探查发现,虫族似乎已经在森林中建立了 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;
}
3 个赞

两个判断语句和答案之间有什么直观联系吗?

3 个赞

不是反问,单纯疑问

3 个赞


因为要判断如果他没被标记过而且她也没地方走就有一个大祭祀

3 个赞

第一个判断语句:
找你的思路,只要这个点的出度为0(它不指向任何点),且没有被枚举过,就统计答案,但是万一它又一个父节点,且父节点没被枚举过呢?(它也没被枚举过)
第二个判断语句:
为何只有E的出度为1时才执行DFS,我可以将E所指向的所有节点都选进来,因此它的出度不一定为1

3 个赞

求code@ tyxQAQ我错了总行了吧

3 个赞