Codeforces Round #595 (Div. 3)B2 简单的dfs

Posted ilikeeatfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #595 (Div. 3)B2 简单的dfs相关的知识,希望对你有一定的参考价值。

原题

https://codeforces.com/contest/1249/problem/B2

这道题一开始给的数组相当于地图的路标,我们只需对每个没走过的点进行dfs即可

 

#include <bits/stdc++.h>

using namespace std;
const int maxn=2e5+20;
int a[maxn],b[maxn],c[maxn];
int dfs(int pos,int step){//传递坐标与步数
if(b[pos]==1){//再次遇到b[pos],返回步数+1
return step+1;
}
else{//若没b[pos]==0,则说明没回原位
b[pos]=1;//标记b[pos]已走过
c[pos]=dfs(a[pos],step+1);
return c[pos];
}
}
int main()
{
int n,m;
cin>>n;
while(n--){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%d",&m);
for(int i=1;i<=m;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
if(!b[i]){//若走过b[i],则跳过
b[i]=1;
c[i]=dfs(a[i],0);
}
}
for(int i=1;i<=m;i++){
cout<<c[i]<<" ";
}
cout<<endl;
}
return 0;
}

以上是关于Codeforces Round #595 (Div. 3)B2 简单的dfs的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #595 (Div. 3) 题解

Codeforces Round #595 (Div. 3)

Codeforces Round #595 (Div. 3)

Codeforces Round #595 (Div. 3)B2 简单的dfs

题解Codeforces Round #595 (Div. 3)(CF1249)

Codeforces Round #595 (Div. 3) E. By Elevator or Stairs?