题目描述
给出一棵有向树,一共有 N ( 1<N≤1000 )个节点,如果一个节点的度(入度+出度)不小于它所有儿子以及它父亲的度(如果存在父亲或儿子),那么我们称这个节点为p节点,现在你的任务是统计p节点的个数。
如样例,第一组的p节点为1,2,3;第二组的p节点为0。
输入格式
第一行为数据组数 T ( 1≤T≤100 )。
每组数据第一行为 N 表示树的节点数。后面为 N?1 行,每行两个数 x , y ( 0≤x,y<N ),代表 y 是 x 的儿子节点。
输出格式
每组数据输出一行,为一个整数,代表这棵树上p节点的个数。
输入样例
2
5
0 1
1 2
2 3
3 4
3
0 2
0 1
输出样例
3
1
判断有些繁琐了,不太满意。本来想写邻接表的,还是觉得邻接矩阵好写
/*
USER_ID: test#birdstorm
PROBLEM: 92
SUBMISSION_TIME: 2014-03-01 17:54:23
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define For(i,m,n) for(i=m;i<n;i++)
#define MAX(x,y) (x)>(y)?(x):(y)
#define MAXN 1005int cnt[MAXN],edge[MAXN][MAXN];main()
{int i, j, n, t, x, y, ans, temp;scanf("%d",&t);while(t--){memset(cnt,0,sizeof(cnt));memset(edge,0,sizeof(edge));ans=0;scanf("%d",&n);For(i,0,n-1){scanf("%d%d",&x,&y);cnt[x]++; cnt[y]++;edge[x][y]=edge[y][x]=1;}For(i,0,n){temp=0;For(j,0,n) if(edge[i][j]&&i!=j) temp=MAX(temp,cnt[j]);ans+=cnt[i]>=temp;}printf("%d\n",ans);}return 0;
}