cf B. Resort

http://codeforces.com/contest/350/problem/B

从旅馆开始倒着找到一个点它的出度>1的位置为止,比较长度大小,找到一个长度最大的即可。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 100010
using namespace std; int n;
int a[maxn],b[maxn];
int out[maxn];
int k; void print(int x)
{
if(b[x]&&out[b[x]]==)
{
print(b[x]);
printf(" %d",x);
}
else
{
printf("%d",x);
return ;
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
for(int j=; j<=n; j++)
{
scanf("%d",&b[j]);
out[b[j]]++;
}
int max1=;
for(int i=; i<=n; i++)
{
if(a[i])
{
int t1=;
for(int j=i; b[j]!=&&out[b[j]]==; j=b[j])
{
t1++;
}
if(max1<t1)
{
max1=t1;
k=i;
}
}
}
printf("%d\n",max1);
print(k);
printf("\n");
}
return ;
}
上一篇:Lucene 的索引文件锁原理


下一篇:助力ssr,使用concent为nextjs应用加点料