比赛 图的简单问题 评测结果 TTATTTTTTT
题目名称 信息传递 最终得分 10
用户昵称 FFF团 运行时间 9.305 s
代码语言 C++ 内存使用 10.23 MiB
提交时间 2017-05-14 21:09:15
显示代码纯文本
#include<bits/stdc++.h>
#include<set>
using namespace std;
set<int>p1[200001],p2[200001];
int a[200001],n,t=1;
int main(){
	freopen("2015message.in","r",stdin);
	freopen("2015message.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		p1[i].insert(i);
		p2[i].insert(i);
	}
	while(true){
		for(int i=1;i<=n;i++){
			if(t%2!=0){
				for(set<int>::iterator it=p1[i].begin();it!=p1[i].end();++it){
				   p2[a[i]].insert(*it);
			    }
			    if(n==p2[a[i]].size()){
				   printf("%d\n",t+1);
				   return 0;
			    }
			}
			else{
				for(set<int>::iterator it=p2[i].begin();it!=p2[i].end();++it){
				   p1[a[i]].insert(*it);
			    }
			       if(n==p1[a[i]].size()){
				   printf("%d\n",t+1);
				   return 0;
			    }
			}
		}
		t++;
	}
}