10pts
查看原帖
10pts
756825
Ze_king楼主2024/9/17 16:52
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n,m;
int a[100010];        // 记录结点能到达的最大点
vector<int> p[100010];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        a[i]=i;                 //初始化
    }
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        p[y].push_back(x);      //建反向边
    }
    for(int i=n;i>=1;i--){
        for(int j=0;j<p[i].size();j++){
            int k=p[i][j];
            a[k]=max(a[i],a[k]);
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}
2024/9/17 16:52
加载中...