这道题是前天天梯赛的题,当时看了一下以为要建树,加上vector忘了怎么插入数据,就没做,下面看了一下,直接bfs就行,注意这题有个坑,要先把入口求出来,就是入度为零的节点,因为题目没说1一定是根节点
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef long long ll;
#define INF 0x3f3f3f3f
#define d(x) cout<<(x)<<endl
const int N = 1e5 + 10;
vector<int> v[N];
int vis[N];
int n, m, num;
void bfs(int x)
{
queue<int> q;
q.push(x);
while(!q.empty()){
int cnt = q.front();
q.pop();
if(q.empty() && !v[cnt].size()){ //如果是最后一个节点直接输出
cout << cnt << endl;
return;
}
for (int i = 0; i < v[cnt].size(); i++){
q.push(v[cnt][i]);
}
}
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &m);
while(m--){
scanf("%d", &num);
vis[num]++;
v[i].push_back(num);
}
}
for(int i = 1; i <= n; i++){ //先找出根节点m
if(!vis[i]){
m = i;
break;
}
}
bfs(m);
return 0;
}