代码30分。
请问:
- 正确性有问题吗?
- 一个点只可能被遍历一次,时间复杂度不是O(n)吗?
- 我把数据下载到本地,发现应该是栈空间爆了,请问是什么原因,这能爆那树形dp不会爆?
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,book[200005];
vector<int> v[200005];
void dfs(int p,int cnt){
for(int i=0;i<v[p].size();i++){
if(book[v[p][i]]){
cout<<cnt-book[v[p][i]];
exit(0);
}
book[v[p][i]]=cnt;
dfs(v[p][i],cnt+1);
book[v[p][i]]=0;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
v[i].push_back(x);
}
book[1]=1;
dfs(1,2);
return 0;
}
本人很弱,不喜勿喷