BFS,DFS都90平pts,第8个点TLE
  • 板块P3916 图的遍历
  • 楼主xuzb
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/26 22:25
  • 上次更新2024/6/27 11:58:24
查看原帖
BFS,DFS都90平pts,第8个点TLE
1062212
xuzb楼主2024/6/26 22:25

为什么BFS,DFS解法第8个样例都会TLE?

附上代码: DFS

#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int> gv[100005];
bool visited[100005]={false};
int dfs(int node,int maxv){
	visited[node]=true;
	maxv=max(maxv,node);
	for(int i=0;i<gv[node].size();i++){
		if(!visited[gv[node][i]]){
			maxv=max(maxv,dfs(gv[node][i],maxv));
		}
	}
	return maxv;
}
int main(){
	cin>>n>>m;
	int u,v;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		gv[u].push_back(v);
	}
	for(int i=1;i<=n;i++){
		cout<<dfs(i,i)<<" ";
		memset(visited,false,sizeof(visited));
	}
	return 0;
}

BFS

//BFS版
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int> gv[100005];
bool inque[100005]={false};
int bfs(int node){
	memset(inque,false,sizeof(inque));
	int maxv=0;
	queue<int> q;
	q.push(node);
	inque[node]=true;
	while(!q.empty()){
		int head=q.front();
		maxv=max(maxv,head);
		for(int i=0;i<gv[head].size();i++){
			if(!inque[gv[head][i]]){
				inque[gv[head][i]]=true;
				q.push(gv[head][i]);
			}
		}
		q.pop();
	}
	//deque<int> q;
	//q.push_back(node);
	//inque[node]=true;
	//while(!q.empty()){
		///int p=q.front();
		//maxv=max(maxv,p);
		//for(int i=0;i<gv[p].size();i++){
			//if(!inque[gv[p][i]]){
				//q.push_back(gv[p][i]);
				//inque[gv[p][i]]=true;
			//}
		//}
		//q.pop_front();
	//}
	return maxv;
}
int main(){
	cin>>n>>m;
	int u,v;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		gv[u].push_back(v);
	}
	for(int i=1;i<=n;i++){
		cout<<bfs(i)<<" ";
	}
	return 0;
}
2024/6/26 22:25
加载中...