北邮2013计算机机试B题
#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
struct node{
int father = -1;//父亲节点
vector<int> son;//儿子节点集合
bool flag = false;//是否在树中
void init(){//初始化
father = -1;
son.clear();
flag = false;
}
};
node tree[maxn];
int du[maxn];
int main(){
int T,N,x,y;
scanf("%d",&T);
while(T--){
for(int i=0;i<maxn;i++){
tree[i].init();//每组都要初始化,因为tree[]是全局变量
}
memset(du,0,sizeof(du));//同上
scanf("%d",&N);
for(int i=1;i<N;i++){
scanf("%d %d",&x,&y);
tree[y].father = x;
tree[x].son.push_back(y);
du[y]++;
du[x]++;
tree[x].flag = true;
tree[y].flag = true;
}
int cnt = 0;
for(int i=0;i<maxn;i++){
if(tree[i].flag==false) continue;
bool key = true;
if(du[i]>=du[tree[i].father]||tree[i].father==-1){
for(int j=0;j<tree[i].son.size();j++){
if(du[i]<du[tree[i].son[j]]){
key = false;
break;
}
}
if(key==true) cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}