有没有大佬能分析一下原因?
附上两版代码:
// 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;
}