5754 全wa求助
  • 板块题目总版
  • 楼主wangif424
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/23 23:42
  • 上次更新2023/10/27 10:12:48
查看原帖
5754 全wa求助
521283
wangif424楼主2022/9/23 23:42
#include<bits/stdc++.h>
using namespace std;
int rd[200001],rd2[200001],book[200001],book2[200001];
int n,a[200001],ans[200001],ans2[200001];
struct b{
	int next,to;
}v[200001];
int first[200001];
int l;
void push(int x,int y,int i);
int mini;
priority_queue<int,vector<int> , greater<int> > q;
priority_queue<int,vector<int> , less<int> > q2;
int main(){
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		if(a[i]){
			push(a[i],i,++l);
			rd[i]++;
			rd2[i]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(rd[i]==0){
			q.push(i);
			q2.push(i);
		}
	}
	for(int k=1;k<=n;k++){
		int b=q.top();
		book[b]=1;
		ans[b]=k;
		q.pop();
		
		int b2=q2.top();
		book2[b2]=1;
		ans2[b2]=k;
		q2.pop();
		
		for(int i=first[b];i!=0;i=v[i].next){
			if(book[v[i].to])continue;
			if(--rd[v[i].to] ==0){
				q.push(v[i].to);
			}
		}
		for(int i=first[b2];i!=0;i=v[i].next){
			if(book2[v[i].to])continue;
			if(--rd2[v[i].to] ==0){
				q2.push(v[i].to);
			}
		}
	}
	for(int i=1;i<=n;i++)cout << ans[i] << " ";
	cout << endl;
	for(int i=1;i<=n;i++)cout << ans2[i] << " ";
	return 0;
}
void push(int x,int y,int l){
	v[l].next=first[x];
	v[l].to=y;
	first[x]=l;
	return;
}
2022/9/23 23:42
加载中...