L2-031 深入虎穴 (25 分)
作者:互联网
如果一个门不是入口,那么一定在其他门后面。
所以我们寻找门,只需在所有门后面的门找出没有出现的门即可。如测试数据:
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
粗体为门后的门,对于1-13的门的标号,唯有1没有出现,那么1是根节点(入口)
那么我们BFS,因为结果唯一且不存在2条路通向一个门(DS:树),那么queue中最后一个节点即最远的节点。
#include "bits/stdc++.h"
using namespace std;
vector <int> table[100005];
int vis[100005];
queue<int> que;
int main(){
memset(vis, 0, 400020);
int n, m;
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d", &m);
int temp;
for(int j = 0; j < m; ++j){
scanf("%d", &temp);
table[i].push_back(temp);
vis[temp] = 1;
}
}
int root;
for(int i = 1; i <= n; ++i){
if(0 == vis[i]) {
root = i;
break;
}
}
que.push(root);
int ans = root;
while(!que.empty()){
int p = que.front();
que.pop();
int len = table[p].size();
for(int i = 0; i < len; ++i) que.push(table[p][i]);
ans = p;//每次更新ans,ans为最后(远)的节点
}
printf("%d\n", ans);
}
标签:que,temp,int,vis,L2,ans,深入虎穴,031,table 来源: https://blog.csdn.net/qq_33987764/article/details/113690584