著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。

内线告诉他,情报就藏在迷宫的最深处。但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。

输入格式:

输入首先在一行中给出正整数 N(<10​5​​),是门的数量。最后 N 行,第 i 行(1≤i≤N)按以下格式描述编号为 i 的那扇门背后能通向的门:

K D[1] D[2] ... D[K]

其中 K 是通道的数量,其后是每扇门的编号。

输出格式:

在一行中输出距离入口最远的那扇门的编号。题目保证这样的结果是唯一的。

输入样例:

13
3 2 3 4
2 5 6
1 7
1 8
1 9
0
2 11 10
1 13
0
0
1 12
0
0

输出样例:12



解题思路:这道题就是说给你N个数,代表N个结点,第i行,每行有K个数;让你找树深度最深的那个结点;题目注意要先找出根,其实题目没出现的数字就是根,所以我们可以把孩子都标记起来,没有被标记的就是根;我们可以先用一个vector把孩子都放在共同的父亲上,然后孩子的深度都比父亲多一;代码如下:
 1 #include<iostream>
 2 #include<vector>
 3 #include<queue>
 4 using namespace std;
 5
 6 int N;
 7 int K;
 8 int tmp;
 9 bool vis[100005];//用来标记点是否出现过,方便找出根结点;
10 vector<int>v[100005];   //动态数组,将相同父亲的孩子放入父亲的vector中;
11 int depth[100005];  //用来记录每个数字的深度;
12 int root;
13 int tp;
14 int maxnn = -1;   //用来找深度最大的;
15 int ans = -1;    //用来记录答案;
16 int main()
17 {
18     queue<int>q;
19     scanf("%d",&N);
20     for(int i = 1 ; i <= N ;i++)
21     {
22         scanf("%d",&K);
23         while(K--)
24         {
25             scanf("%d",&tmp);
26             v[i].push_back(tmp);  //将孩子结点放入父亲的数组中;
27             vis[tmp] = 1;    //标记该点是孩子结点;
28         }
29     }
30
31         for(int j = 1 ; j <= N ;j++)
32         {
33             if(vis[j]!=1)
34             {
35                 root = j ;    //找到根结点;
36             }
37         }
38         q.push(root);    //将根结点入队;
39         depth[root] = 1;  //根的深度为1;
40         while(!q.empty())
41         {
42             tp = q.front();
43             q.pop();
44             for(int j = 0 ; j < v[tp].size();j++)
45             {
46                 depth[v[tp][j]] = depth[tp]+1;  //每个孩子的深度比父亲多一;
47                 q.push(v[tp][j]);  //将孩子入队,重复过程;
48             }
49         }
50
51         for(int j = 1 ; j <= N ;j++)
52         {
53             if(depth[j]>maxnn)
54             {
55                 maxnn = depth[j];  //找最大深度的;
56                 ans = j;     //找到答案;
57             }
58         }
59         printf("%d\n",ans);
60
61     return 0;
62 }



转载于:https://www.cnblogs.com/yewanting/p/10753066.html

PTA 7-2 深入虎穴 (30 分)相关推荐

  1. PTA:7-102 喊山 (30分)---解析(bfs广度优先搜索,vector)

    7-102 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的& ...

  2. PTA 7-3 地铁一日游 (30 分)

    森森喜欢坐地铁.这个假期,他终于来到了传说中的地铁之城--魔都,打算好好过一把坐地铁的瘾! 魔都地铁的计价规则是:起步价 2 元,出发站与到达站的最短距离(即计费距离)每 K 公里增加 1 元车费. ...

  3. PTA 计算年龄问题 (30 分)

    定义一个Birthday类,其成员变量有3个整形变量(出生的年月日):year,month,day:提供构造方法对这3个成员变量进行初始化:提供成员变量的get.set方法:成员函数有getAge() ...

  4. PTA:7-10 深入虎穴 (25 分)

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  5. PTA L3-031 千手观音 (30 分)

    PTA L3-031 千手观音 (30 分) 人类喜欢用 10 进制,大概是因为人类有一双手 10 根手指用于计数.于是在千手观音的世界里,数字都是 10 000 进制的,因为每位观音有 1 000 ...

  6. PTA 直捣黄龙(30分)

    直捣黄龙 (30 分) 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求 ...

  7. PTA 直捣黄龙 (30 分)

    7-13 直捣黄龙 (30 分) 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯 ...

  8. C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)

    1099 Build A Binary Search Tree (30分) A Binary Search Tree (BST) is recursively defined as a binary ...

  9. C++学习之路 | PTA(甲级)—— 1064 Complete Binary Search Tree (30分)(带注释)(精简)

    1064 Complete Binary Search Tree (30分) A Binary Search Tree (BST) is recursively defined as a binary ...

  10. C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)

    L3-003 社交集群 (30分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣爱好相同的人的集 ...

最新文章

  1. boos里的AHCI RAID_安徒恩Raid删除,安徒恩讨伐战上线,详细攻略快速看,成为新的摸金圣地...
  2. 海生《我不是你的玩偶》关注颇高
  3. java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现
  4. php nfs,NFS(网络文件系统)服务器简单解析
  5. Java Streams,第 2 部分: 使用流执行聚合
  6. C# using的用法
  7. 51芯片4*4列阵按键c语言程序,单片机城中社稷.doc
  8. Android 网络异常
  9. 文本编辑器查看 cprintf颜色_实战PyQt5: 028-纯文本编辑控件QPlainTextEdit
  10. MaxCompute Spark 使用和常见问题
  11. Python 3.8.0 发布!
  12. c#打开数据库连接池的工作机制_它是谁?一个比 c3p0 快 200 倍的数据库连接池!...
  13. Windows Store App 图像
  14. 关于WebBrowser(浏览器)控件的调用
  15. VectorDraw机械制图,VectorDraw图形引擎crack版
  16. Win10 LTSB/LTSC安装微软商店/Microsoft store
  17. 三进制计算机_三进制会取代二进制计算机吗?
  18. Python 重载向量加法运算符 +
  19. 在HTML中lt;是什么意思?
  20. 使用DiskMan(DiskGen)恢复被删除的分区

热门文章

  1. mysql6.1 交叉编译_Armbian系统-mysql-connector-c++-1.1.8版本-交叉编译-安装
  2. Python入门--函数参数的定义,以及print输出格式的设置
  3. vue异步数据 报错_VUE 异步数据传递给 component props 的问题
  4. java 判断是否为cst格式_Java判断文件编码格式
  5. 7.王道考研数据结构-队列
  6. 链路状态路由选择LS
  7. NYOJ 82:迷宫寻宝(一)(BFS)
  8. javascript手机号码、电子邮件正则表达式 一种解决方案
  9. Rabbitmq基本原理和架构
  10. jquery中serialize()序列化函数