暑假集训 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


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

相关文章推荐

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

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

暑假集训 8.15 数据结构实验之图论二:基于邻接表的广度优先搜索遍历 sdutoj2142

数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,...

暑假集训 8.12 sdutoj3375 数据结构实验之查找三:树的种类统计 (简单字符排序二叉树)

数据结构实验之查找三:树的种类统计 Time Limit: 400ms   Memory limit: 65536K  题目描述 随着卫星成像技术的应用,自然资源研究机构可以识别每...

暑假集训 8.22 数据结构实验:哈希表 sdutoj1480

数据结构实验:哈希表 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  在n个数中,找出出现次数最多那个数字,并...

暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)

二叉排序树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: ...

暑假集训 8.17 数据结构实验:连通分量个数(并查集判断连通分量个数 路径压缩)sdutoj1488

数据结构实验:连通分量个数 Time Limit: 1000MS Memory limit: 65536K 题目描述  在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。...

暑假集训 8.11 树结构练习——排序二叉树的中序遍历 sdutoj2128

树结构练习——排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就...

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

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

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

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descr...

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

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述  众人皆知,在编程领域中,C++是一门非常重要的语言,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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