题目传送门:http://codeforces.com/contest/1020/problem/B
题目意思比较简单,就是一步一步走,注意这里要用递归(可以省去判断的麻烦),否则会超时
AC code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#define INF 1e5
using namespace std;
const int maxn = 1000 + 100;
int n = 0;
struct Node{
int biao;
int num;
};
Node data[maxn];
void dfs(int p){
++data[p].num;
if(data[p].num >= 2){
printf("%d ",p);
return ;
}
dfs(data[p].biao);
}
int main(){
scanf("%d",&n);
for(int i = 1;i <= n;++i){
//cin >> data[i].biao;
scanf("%d",&data[i].biao);
}
for(int i = 1;i <= n;++i){
dfs(i);
for(int j = 1;j <= n;++j){
data[j].num = 0;
}
}
return 0;
}
本文解析了CodeForces竞赛中的一道B级题目,并提供了一种使用递归解决该问题的方法,避免了复杂的条件判断,有效防止了运行超时的情况。
155

被折叠的 条评论
为什么被折叠?



