蒟蒻求助!!找不出错啦
查看原帖
蒟蒻求助!!找不出错啦
466751
_DeRozan_楼主2021/1/21 09:02
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN=100010;
vector<int> g[MAXN];
vector<int> f[MAXN];
int n,m;
int in[MAXN];
int ord[MAXN];
int vis[MAXN];
int dp[MAXN];
void init()
{
    cin>>n>>m;
    for (int i=0,u,v;i<m;++i) {
        cin>>u>>v;
        g[u].push_back(v);
        f[v].push_back(u);
        ++in[v];
    }
}
bool toposort()
{
    queue<int> q;
    int cnt=0;
    for (int i=1;i<=n;++i){
        dp[i]=1;
        if (in[i]==0){
            q.push(i);
        }
    }
    while (!q.empty()) {
        int k=q.front(); q.pop();
        ord[++cnt]=k;
        for (int i=0;i<g[k].size();++i){
            if (--in[g[k][i]]==0) {
                q.push(g[k][i]);
                for(int j=0;j<f[g[k][i]].size();++j){
                    dp[g[k][i]]=max(dp[f[g[k][i]][j]]+1,dp[i]);
                }
            }
        }
        
                
    }
    return cnt==n;
}
int main()
{
    init();
    toposort();
    for(int i=1;i<=n;++i) cout<<dp[i]<<endl;
    return 0;
}

不知道哪里写错了。代码应该很好看,就是拓扑排序上的dp

2021/1/21 09:02
加载中...