暑假集训 8.16 sdutoj3642 判断给定森林中有多少棵树特别版 (简单考查邻接表)

原创 2016年08月16日 16:54:05

判断给定森林中有多少棵树特别版

Time Limit: 1000ms   Memory limit: 65536K 

题目描述

 众人皆知,在编程领域中,C++是一门非常重要的语言,不仅仅因为其强大的功能,还因为它是很多其他面向对象语言的祖先和典范。不过这世上几乎没什么东 西是完美的,C++也不例外,多继承结构在带来强大功能的同时也给软件设计和维护带来了很多困难。为此,在java语言中,只允许单继承结构,并采用接口 来模拟多继承。KK最近获得了一份java编写的迷你游戏的源代码,他对这份代码非常感兴趣。这份java代码是由n个类组成的(本题不考虑接口),n个类分别用数字1..n表示。现在给你n个类之间的关系,有q次询问,每次询问某一个有多少个直接继承的子类。输入子类的个数和标号(标号按照字典序大小输出)。

输入

首先输入一个整数T,表示数据的组数。每组数据格式如下。
第一行包含两个整数n,m,表示该份代码中的n个类和m个单继承关系(1<=m<n<=10^5)

输出

 对于每组输入。输出询问类的子类的数量和编号。

示例输入

1
10 9
2 1
3 2
4 3
5 3
6 3
7 3
8 3
9 3
10 5
10
7
6
3
7
1
2
8
1
2
5

示例输出

0
0
6
4 5 6 7 8 9
0
1
2
1
3
0
1
2
1
3
1
10

邻接表存储图,然后询问的时候依次输出某个head[]中的元素就行了.....

用矩阵的话会爆内存;

不过题目描述和题目....

///ACcode

#include <bits/stdc++.h>

using namespace std;

const int maxn=100010;

typedef struct node
{
    int data;
    node *next;
} node,*Node;

///有序的邻接表插入函数...头指针的数据域代表"后面"一共有多少个元素
void Insert(Node &head,int x)
{
    Node q,a,tail; ///a是q的前驱节点 tail是要插入的节点

    tail=new node;
    tail->data=x;

    if (head==NULL)
    {
        head=new node;
        head->data=1;  ///初始为 1

        head->next=tail;
        tail->next=NULL;
    }
    else if (head!=NULL)
    {
        head->data++; ///链的 数据个数++

        a=head; ///前驱
        q=head->next;
        while (q)
        {
            if (q->data > x)
            {
                a->next=tail;
                tail->next=q;
                break; ///从小到大排序 遇到大的就插入 然后一定要跳出while
            }
            a=a->next;
            q=q->next;
        }
        if (q==NULL)  ///没找到比x大的 所以把x放在最后
        {
            a->next=tail;
            tail->next=NULL;
        }
    }
}

int main()
{
    int n,m,i;
    int u,v;
    int key;
    int t;
    Node head[maxn],tail;

    cin>>t;
    while (t--)
    {
        cin>>n>>m;
        for (i=1; i<=n; i++) ///初始化
        {
            head[i]=NULL;
        }
        for (i=1; i<=m; i++)
        {
            cin>>u>>v;
            Insert(head[v],u); ///将u的数据插入到v的节点中
        }
        int q;
        cin>>q;
        for (i=1; i<=q; i++)
        {
            cin>>key;
            if (head[key]==NULL)
            {
                cout<<"0"<<endl;
            }
            else
            {
                cout<<head[key]->data<<endl;
                tail=head[key]->next;
                while (tail)
                {
                    cout<<tail->data;
                    if (tail->next!=NULL)
                    {
                        cout<<" ";
                    }
                    tail=tail->next;
                }
                cout<<endl;
            }
        }
    }
    return 0;
}

有关的邻接表传送门  http://blog.csdn.net/gentle_guan/article/details/52214869


版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

判断给定森林中有多少棵树特别版

题目描述  众人皆知,在编程领域中,C++是一门非常重要的语言,不仅仅因为其强大的功能,还因为它是很多其他面向对象语言的祖先和典范。不过这世上几乎没什么东 西是完美的,C++也不例外,多继承结构在带...
  • hang__xiu2016acm
  • hang__xiu2016acm
  • 2016年08月22日 16:42
  • 284

暑假集训 8.11-2 树结构练习——判断给定森林中有多少棵树 sdut2198 并查集

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述 众人皆知,在编程领域中,C++是一门非常...
  • Gentle_Guan
  • Gentle_Guan
  • 2016年08月11日 17:19
  • 250

树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Problem Description  众人皆知,在编程领域中,C++...
  • flying_star521
  • flying_star521
  • 2016年11月19日 20:21
  • 153

树结构练习——判断给定森林中有多少棵树

点击打开链接 树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述  众...
  • cswhit
  • cswhit
  • 2016年08月11日 15:15
  • 113

树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descr...
  • qq_33362864
  • qq_33362864
  • 2016年11月09日 16:41
  • 76

树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descr...
  • Today_up
  • Today_up
  • 2016年11月20日 21:44
  • 123

树结构练习——判断给定森林中有多少棵树(并查集)

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000ms   Memory limit: 65536K   题目描述  众人皆知,在编程领域中,C++是一门非常重...
  • zheng__jun
  • zheng__jun
  • 2016年08月09日 11:34
  • 372

树结构练习——判断给定森林中有多少棵树

Time Limit: 1000MS Memory limit: 65536K 题目描述  众人皆知,在编程领域中,C++是一门非常重要的语言,不仅仅因为其强大的功能,还因为它是很多其...
  • MandyXin
  • MandyXin
  • 2014年11月27日 17:26
  • 240

树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述  众人皆知,在编程领域中,C++...
  • acher66
  • acher66
  • 2016年08月11日 11:27
  • 103

树结构练习——判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述  众人皆知,在编程领域中,C++是一门非常重要的语言,...
  • just_so_so_fnc
  • just_so_so_fnc
  • 2016年08月11日 15:41
  • 151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:暑假集训 8.16 sdutoj3642 判断给定森林中有多少棵树特别版 (简单考查邻接表)
举报原因:
原因补充:

(最多只允许输入30个字)