90pts求条,悬关
查看原帖
90pts求条,悬关
1014060
yyc_hzdebaba楼主2025/7/19 14:10

WA on #9

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,z,qz[105][105],rd[105],ans[105],dp[105],a[105],b[105];
void tp(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(!rd[j]){
                ans[++ans[0]]=j;
                rd[j]=-1;
                for(int k=1;k<=n;k++)if(qz[j][k])rd[k]--;
                break;
            }
        }
    }
}
void dfs(int x){
    for(int i=1;i<x;i++)if(qz[ans[i]][ans[x]] && dp[ans[x]]==dp[ans[i]]+qz[ans[i]][ans[x]])dfs(i);
    a[++a[0]]=x;
}
int main(){
    cin>>n>>m;
    n++;
    for(int i=1;i<=m;i++){
        cin>>x>>y>>z;
        qz[x][y]=z;
        rd[y]++;
    }
    tp();
    for(int i=2;i<=n;i++){
        for(int j=1;j<i;j++)if(qz[ans[j]][ans[i]])dp[ans[i]]=max(dp[ans[i]],dp[ans[j]]+qz[ans[j]][ans[i]]);
    }
    cout<<dp[ans[n]]<<endl;
    dfs(n);
    for(int i=1;i<=a[0];i++)b[a[i]]++;
    for(int i=1;i<=n;i++)if(b[i])cout<<i<<" ";
    return 0;
}
2025/7/19 14:10
加载中...