显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<int>e[N],stk;
int n,ans[N],ins[N];
int dfs(int x){
if(ans[x])return ans[x];
else if(ins[x]){
while(1){
int y=stk.back();stk.pop_back();
e[y].pop_back();
ins[y]=0;
if(x==y)break;
}
}
ins[x]=1,stk.push_back(x);
if(!e[x].size())return x;
else return dfs(e[x].back());
}
int main(){
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
scanf("%d",&n);
for(int i=1,k;i<=n;i++){
scanf("%d",&k);
for(int j=1,x;j<=k;j++){
scanf("%d",&x);
e[i].push_back(x);
}
}
for(int i=1;i<=n;i++){
if(!ans[i]){
int x=dfs(i);
while(stk.size()){
int y=stk.back();
ans[y]=x;stk.pop_back();
}
}
}
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
return 0;
}