40pts求调
查看原帖
40pts求调
1236674
flowercode楼主2024/8/12 23:30
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N = 1e5 + 10;
int n , m;
//vis标记遍历过的边
int e[N] , ne[N] , h[N] ,idx , vis[N];
int ans[N];
int dfs(int p){
    int res = 0;
    for(int i = h[p]; i != -1; i =ne[i]){
        int j = e[i];
        if(!vis[i]){
            vis[i] = 1;
            res = max(res , dfs(j));
        }
    }
    ans[p] = max(ans[p] , res);
    return ans[p];
}
int main(){
    cin >> n >> m;
    memset(h,-1,sizeof(h));
    for(int i = 0 ; i < m ; ++ i){
        int a ,b;
        cin >> a >> b;
        e[idx] = b , ne[idx] = h[a] , h[a] = idx ++;

    }
    for(int i = 1 ; i <= n ; ++i)ans[i] = i;
    for(int i = 1; i <= n ; ++i)cout << dfs(i) << " ";
    return 0;
}
2024/8/12 23:30
加载中...