求问|反向建边,DFS能过,BFS超时
查看原帖
求问|反向建边,DFS能过,BFS超时
302143
指针Pointer楼主2024/5/29 13:10

有没有大佬能分析一下原因?

附上两版代码:

// BFS,70pts
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    vector< vector<int> > g(n+1);
    for( int i=0 ; i<m ; i++ ){
    	int a,b;
    	cin>>a>>b;
    	g[b].push_back(a);
	}
	vector<int> ans(n+1,0);
	for( int i=n ; i>0 ; i-- ){
		queue<int> que;
		que.push(i);
		vector<int> flag(n+1);
		while(!que.empty()){
			int nn = que.front(); que.pop();
			if( flag[nn] )
				continue;
			if( ans[nn] )
				continue;
			flag[nn] = 1;
			ans[nn] = i;
			for( int j=0 ; j<g[nn].size() ; j++ )
				que.push(g[nn][j]);
		}
	}
	for( int i=1 ; i<=n ; i++ )
		cout<<ans[i]<<" ";
    return 0;
}
// DFS 100pts
#include <bits/stdc++.h>
using namespace std;

int n,m;
vector< vector<int> > g;
vector<int> ans;

void dfs(int x,int d){
	if( ans[x] )
		return ;
	ans[x] = d;
	for( int i=0 ; i<g[x].size() ; i++ )
		dfs(g[x][i],d);
}

int main(){
    cin>>n>>m;
    g = vector< vector<int> >(n+1);
    ans = vector<int>(n+1,0);
    for( int i=0 ; i<m ; i++ ){
    	int a,b;
    	cin>>a>>b;
    	g[b].push_back(a);
	}
	for( int i=n ; i>0 ; i-- ){
		dfs(i,i);
	}
	for( int i=1 ; i<=n ; i++ )
		cout<<ans[i]<<" ";
    return 0;
}
2024/5/29 13:10
加载中...