1 条题解

  • 0
    @ 2026-7-25 19:49:14

    90分,第6题错

    #include <iostream>
    #include <vector>
    #include <queue>
    #include <algorithm>
    using namespace std;
    const int MAXN=1005;
    vector<int> g[MAXN];
    int in[MAXN];
    int dp[MAXN];
    int pre[MAXN];
    vector<int> topo;
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n,m;
        cin>>n>>m;
        fill(dp,dp+MAXN,1);
        fill(pre,pre+MAXN,-1);
        fill(in,in+MAXN,0);
        for(int i=0;i<m;i++){
            int u,v;
            cin>>u>>v;
            g[u].push_back(v);
            in[v]++;
        }
        queue<int> q;
        for(int i=1;i<=n;i++){
            if(in[i]==0) q.push(i);
        }
        while(!q.empty()){
            int u=q.front();
            q.pop();
            topo.push_back(u);
            for(int v:g[u]){
                if(dp[v]<dp[u]+1){
                    dp[v]=dp[u]+1;
                    pre[v]=u;
                }
                in[v]--;
                if(in[v]==0) q.push(v);
            }
        }
        int max_len=0;
        int end_node=MAXN;
        for(int i=1;i<=n;i++){
            if(dp[i]>max_len||(dp[i]==max_len&&i<end_node)){
                max_len=dp[i];
                end_node=i;
            }
        }
        vector<int> path;
        int cur=end_node;
        while(cur!=-1){
            path.push_back(cur);
            cur=pre[cur];
        }
        reverse(path.begin(),path.end());
        cout<<max_len<<'\n';
        for(size_t i=0;i<path.size();i++){
            if(i>0) cout<<' ';
            cout<<path[i];
        }
        cout<<'\n';
        return 0;
    }
    
    • 1

    信息

    ID
    126
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    51
    已通过
    2
    上传者