链接:
https://www.nowcoder.com/acm/contest/86/F
只要子儿子存在一个p,那么当前这个节点就为n,反之如果儿子全部都是n,那么当前节点就为p,dfs就可以解决,我在初始化vector的时候少打了一个=,wa两次,还是太粗心
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define ll long long
using namespace std;
void dis(int a[], int n){
printf("总数为%d个\n",n);
for(int i = 0; i < n; i++) cout<<a[i]<<", ";
cout<<endl<<"------------------"<<endl;
}
const int mx = 1e4+10;
int vis[mx];
int T,n,r;
vector<int>ma[mx];
int dfs(int x){
vis[x] = 1;
int flag = 0;
for(int i = 0; i <ma[x].size(); i++){
int z = ma[x][i];
if(!vis[z]){
if(dfs(z) == 0)
flag = 1;
}
}
if(flag)
return 1;
return 0;
}
int main(){
int a,b;
scanf("%d",&T);
//dis(sg,10);
while(T--){
for(int i = 0; i <= n ; i++) //这里要谨慎,少写一个等于号就wa,或者干脆全部都进行clear
ma[i].clear();
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&r);
for(int i = 1 ; i < n; i++){
scanf("%d%d",&a,&b);
ma[a].push_back(b);
ma[b].push_back(a);
}
if(dfs(r))
puts("Gen");
else
puts("Dui");
}
return 0;
}