码迷,mamicode.com
首页 > 其他好文 > 详细

kAri OJ 92 统计节点个数 邻接表

时间:2015-03-22 09:14:22      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:kari oj

时间限制 1000 ms 内存限制 65536 KB

题目描述

给出一棵有向树,一共有N技术分享(1<N1000技术分享)个节点,如果一个节点的度(入度+出度)不小于它所有儿子以及它父亲的度(如果存在父亲或儿子),那么我们称这个节点为p节点,现在你的任务是统计p节点的个数。

如样例,第一组的p节点为1,2,3;第二组的p节点为0。

输入格式

第一行为数据组数T技术分享(1T100技术分享)。
每组数据第一行为N技术分享表示树的节点数。后面为N?1技术分享行,每行两个数x技术分享,y技术分享(0x,y<N技术分享),代表y技术分享x技术分享的儿子节点。

输出格式

每组数据输出一行,为一个整数,代表这棵树上p节点的个数。

输入样例

2
5
0 1
1 2
2 3
3 4
3
0 2
0 1

输出样例

3
1





#include<stdio.h>
#include<stdlib.h>
int head[1001],du[1001],k;
typedef struct Edge
{
    int v,next;
}Edge;
Edge  edge[2002];
void addEdge(int u,int v)
{
    edge[k].v=v;
    edge[k].next=head[u];
    head[u]=k++;
}

int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
        int n,i,j;
        scanf("%d",&n);
        k=0;
        for(i=0;i<=n;i++)
        {
            head[i]=-1;
            du[i]=0;
        }
        for(i=0;i<n-1;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            addEdge(u,v);
            addEdge(v,u);
            du[u]++;
            du[v]++;
        }
        int sum=0;
        for(i=0;i<n;i++)
        {
            int flag=0;
            for(j=head[i];j!=-1;j=edge[j].next)
            {
                int v=edge[j].v;
                if(du[i]<du[v])
                {
                    flag=1;
                    break;
                }
            }
            if(!flag) sum++;
        }
        printf("%d\n",sum);
        }

    }
    return 0;
}


kAri OJ 92 统计节点个数 邻接表

标签:kari oj

原文地址:http://blog.csdn.net/ruzhuxiaogu/article/details/44523167

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!