CF1020B Badge 【模拟链表】
n个点(n<=1000)
接下来n个整数表示ai
第i个数ai表示i到ai有一条边
输出:
n个数
表示从第i个点出发,最先被访问两次的点
样例1: 从1 出发,先到达2,2会到达3,3又到达2. 2被访问第二次。输出 2 从2 出发,先到达3,3到达2,2被访问两次,输出 2
从3 出发,先到2 ,2 又到3,3被访问2次,输出 3
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<cstring>
#include<set>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<cctype>
#include<stack>
#include<sstream>
#include<list>
#include<assert.h>
#include<bitset>
#include<numeric>
#define mod 10003
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 1<<30;
const int maxn = 1000003;
const double eps = 1e-8;
int t,n,m,q;
int a[maxn],v[maxn];
int ok(int x)
{
memset(v,0,sizeof(v));
while(1)
{
v[x]++;
if(v[x]==2) return x;
x=a[x];
}
}
int main()
{
while(cin>>n)
{
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
if(i==1) cout<<ok(i); else cout<<' '<<ok(i);
}
cout<<endl;
}
return 0;
}