hihoCoder 第265周 hiho一下 可疑的记录

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi有一棵N个节点的树,编号1-N,其中1号节点是整棵树的根。他把这棵树的N-1条边记录成N-1行,每行2个整数a和b,表示a是b的父节点。  

喜欢恶作剧的小Ho在小Hi的记录里加了一行两个整数,于是小Hi不得设法找出这行可疑的记录。具体来说,如果去掉某一行之后,余下N-1行按小Hi的规则(a是b的父节点)恰好能构成一棵N个节点的树,并且满足编号恰好是1-N且1号节点是根,那么被去掉的一行就被视为可疑的。  

你能帮小Hi找出所有可疑的记录吗?

输入

第一行包含一个整数N,表示树的节点数目。  

以下N行每行两个整数a和b,表示a是b的父节点。  

对于30%的数据,1 <= N <= 1000  

对于100%的数据, 1 <= N <= 100000, 1 <= a, b <= N

输入保证合法。

输出

输出一行包含若干个从小到大的整数,表示可疑的行号。(行号从1开始)

样例输入
3
1 2
1 3
1 3
样例输出
2 3

题目简单。怀疑样例的输入给错了,最后一行输入应该是  2  3

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <vector>
 5 #include <stack>
 6 #include <set>
 7 #include <map>
 8 
 9 using namespace std;
10 
11 
12 int main()
13 {
14     int N;
15     int a, b;
16     cin >> N;
17     set<int>ss;
18     map<int, int>mm;
19     for (int i = 0; i < N; i++)
20     {
21         cin >> a >> b;
22         if (b == 1)
23         {
24             printf("%d", i + 1);
25             return 0;
26         }
27         int n = ss.size();
28         ss.insert(b);
29         int n2 = ss.size();
30         if (n == n2)
31         {
32             printf("%d %d", mm[b], i + 1);
33             return 0;
34         }
35         mm[b] = i + 1;
36     }
37     return 0;
38 }

 

posted @ 2019-07-27 22:05  CaliforniaCHAO  阅读(183)  评论(0编辑  收藏  举报