题意及思路:
显而易见,每个国王死后是不可能再生孩子的,所以这个题目的答案就是一个dfs序,只需要将整个dfs序用队列存储下来,然后每次国王去世就标记一下,去判断队头这个国王有没有被标记,被标记了就一直pop,直到没被标记就输出。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
#define int long long
typedef pair<int, int>PII;
const int Max = 0x3f3f3f3f3f3f3f3f;
const int Min = -0x3f3f3f3f3f3f3f3f;
int n, m, k;
int T;
vector<int>v[N];
queue<int>q;
int a[N];
bool st[N];
void dfs(int u)
{
for(int i = 0; i < v[u].size(); i ++)
{
int t = v[u][i];
q.push(t);
dfs(t);
}
}
signed main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n;
int cnt = 1, ct = 0;
for(int i = 0; i < n; i ++)
{
int x, y;
cin >> x >> y;
if(x==1)
v[y].push_back(++cnt);
else
a[++ct] = y;
}
q.push(1);
dfs(1);
for(int i = 1; i <= ct; i ++)
{
st[a[i]] = true;
while(st[q.front()]) q.pop();
cout << q.front() << "\n";
}
return 0;
}