37分,其他全WA求助
  • 板块P1807 最长路
  • 楼主Daguozai
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/10 16:20
  • 上次更新2024/8/10 17:09:27
查看原帖
37分,其他全WA求助
1370387
Daguozai楼主2024/8/10 16:20
#include <stdio.h>
int h[1505]={0},f[1505],value[1505][1505]={0};
struct road{
    int a,b,next;
}num[100005];
int ru[1505]={0},chu[1505]={0};
int max(int a,int b){
    if(a>b){
        return a;
    }else{
        return b;
    }
}
int main(){
    for(int i=0;i<1505;i++){
        f[i]=-100000;
    }
    int n,m;
    scanf("%d %d",&n,&m);
    int u,v,w;
    for(int i=1;i<=m;i++){
        scanf("%d %d %d",&u,&v,&w);
        num[i].a=u;num[i].b=v;value[u][v]=w;num[i].next=h[u];h[u]=i;
        ru[v]++;chu[u]++;
    }
    int p=0;
    int blank[1505];
    for(int i=1;i<=n;i++){
        if(ru[i]==0){
            blank[p++]=i;
            f[i]=0;
        }
    }
    int start=0,end=p,flag=0;
    while(end>start){
        int a=blank[start];
        start++;
        for(int k=h[a];k;k=num[k].next){
            int b=num[k].b;
            ru[b]--;
            if(f[a]+value[a][b]>f[b]){
                f[b]=f[a]+value[a][b];
            }
            if(ru[b]==0){
                if(b==n){
                    flag=1;
                    break;
                }
                blank[end++]=b;
            }
        }
        if(flag==1){
            break;
        }
    }
    if(flag==0){
        printf("-1");
    }else{
        printf("%d",f[n]);
    }
}
2024/8/10 16:20
加载中...