弱鸡求助,样例没过
查看原帖
弱鸡求助,样例没过
902195
appIe365楼主2023/1/5 22:22
#include <bits/stdc++.h>
using namespace std;
const int N = 100005,M = 200005;
int n,m,dp[N];
int head[N],tot;
struct node{
    int next,to;
}eg[M];
void add(int a,int b){
    eg[++tot].to = b,eg[tot].next = head[a],head[a] = tot;
}
queue<int> q;
int dis[N],in[N];
int topos[N];
void toposort()
{
    int cnt = 0;
    for(int i = 1;i <= n;i ++)
        if(!in[i]){
            q.push(i);
            topos[++cnt] = i;
        }
    while(q.size()){
        int x = q.front();
        q.pop();
        for(int i = head[x];i;i = eg[i].next){
            int y = eg[i].to;
            in[y] --;
            if(in[y] == 0){
                q.push(y);
                topos[++cnt] = y;
            }
        }
    }
    return ;
}

int main()
{
    cin >> n >> m;
    int a,b;
    for(int i = 1;i <= m;i ++){
        cin >> a >> b;
        add(a,b);
        in[b] ++;
    }
    toposort();
    for(int i = 1;i <= n;i ++) 
        dp[i] = 1;
    for(int i = 1;i <= n;i ++){
        int u = topos[i];
        for(int j = head[u];j;j = eg[j].next){
            int y = eg[i].to;
            dp[y] = max(dp[y],dp[u]+1);
        }
    }
    for(int i = 1;i <= n;i ++)
        cout << dp[i] << "\n";
    return 0;
}
2023/1/5 22:22
加载中...