求助
查看原帖
求助
989000
hao50yu楼主2024/12/7 18:00
#include<iostream>
#include<queue>
#include<vector>
using namespace  std;

const int MAXN=1e5+10;
int main(){
    int n,m;
    cin>>n>>m;
    vector<int> val[n+1];
    int vis[n+1]={0};
    int A[n+1]={0};
    int len=0;
    int v,u;
    for(int i=0;i<m;i++){
        cin>>v>>u;
        val[u].push_back(v);
    }
    queue<int> q;
    for(int i=n;i>0&&vis[i]==0;i--){
        A[i]=i;
        q.push(i);
        while(!q.empty()){
            int t =q.front();
            vis[t]=1;
            q.pop();
            for(int j =0;j<val[t].size();j++){
                if(vis[val[t][j]]==0){
                    q.push(val[t][j]);
                    A[val[t][j]]=A[i];
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<A[i]<<" ";
    }
    cout<<endl;
}

为什么for循环条件设置成i>0&&vis[i]==0的时候就只进行一次for循环啊,之后就算vis[i]有不为0的情况也不进入循环了

2024/12/7 18:00
加载中...