为什么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;
}