记录编号 601525 评测结果 AAAAAAAAAA
题目名称 4164.[CF1889D] Game of Stack 最终得分 100
用户昵称 Gravatar左清源 是否通过 通过
代码语言 C++ 运行时间 1.192 s
提交时间 2025-06-25 17:13:10 内存使用 14.62 MiB
显示代码纯文本
#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;
}