dfs求指导,为什么我觉得时间复杂度是O(n)?
查看原帖
dfs求指导,为什么我觉得时间复杂度是O(n)?
782904
哈哈人生楼主2024/8/23 09:02

代码30分。

请问:

  1. 正确性有问题吗?
  2. 一个点只可能被遍历一次,时间复杂度不是O(n)吗?
  3. 我把数据下载到本地,发现应该是栈空间爆了,请问是什么原因,这能爆那树形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;
}

本人很弱,不喜勿喷

2024/8/23 09:02
加载中...