2 条题解

  • 0
    @ 2025-10-8 16:50:35
    #include<bits/stdc++.h>
    using namespace std;
    struct node{int x,y,c,next;}a[1100];int len,last[1100];
    void ins(int x,int y,int c){len++;a[len]=node{x,y,c,last[x]};last[x]=len;}
    int rd[1100],d[1100];
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        memset(rd,0,sizeof(rd));
        len=0;memset(last,0,sizeof(last));
        for(int i=1;i<=m;i++)
        {
            int x,y,c;scanf("%d%d%d",&x,&y,&c);
            ins(x,y,c);rd[y]++;
        }
        memset(d,0,sizeof(d));
        queue<int>Q;
        for(int i=1;i<=n;i++)if(rd[i]==0)Q.push(i),rd[i]=-1;
        while(!Q.empty())
        {
            int x=Q.front();
            for(int k=last[x];k>0;k=a[k].next)
            {
                int y=a[k].y;
                if(d[y]<d[x]+a[k].c)d[y]=d[x]+a[k].c;
                rd[y]--;
                if(rd[y]==0)Q.push(y),rd[y]=-1;
            }
            Q.pop();
        }
        int ans=0;for(int i=1;i<=n;i++)ans=max(ans,d[i]);
        printf("%d\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:50:23
      #include<bits/stdc++.h>
      using namespace std;
      struct node{int x,y,c,next;}a[1100];int len,last[1100];
      void ins(int x,int y,int c){len++;a[len]=node{x,y,c,last[x]};last[x]=len;}
      int rd[1100],d[1100];
      int main()
      {
          int n,m;scanf("%d%d",&n,&m);
          memset(rd,0,sizeof(rd));
          len=0;memset(last,0,sizeof(last));
          for(int i=1;i<=m;i++)
          {
              int x,y,c;scanf("%d%d%d",&x,&y,&c);
              ins(x,y,c);rd[y]++;
          }
          memset(d,0,sizeof(d));
          queue<int>Q;
          for(int i=1;i<=n;i++)if(rd[i]==0)Q.push(i),rd[i]=-1;
          while(!Q.empty())
          {
              int x=Q.front();
              for(int k=last[x];k>0;k=a[k].next)
              {
                  int y=a[k].y;
                  if(d[y]<d[x]+a[k].c)d[y]=d[x]+a[k].c;
                  rd[y]--;
                  if(rd[y]==0)Q.push(y),rd[y]=-1;
              }
              Q.pop();
          }
          int ans=0;for(int i=1;i<=n;i++)ans=max(ans,d[i]);
          printf("%d\n",ans);
          return 0;
      }
      • 1

      信息

      ID
      452
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      62
      已通过
      30
      上传者