3 条题解

  • 1
    @ 2025-8-13 11:21:26
    #include<bits/stdc++.h>
    using namespace std;
    void read(long long &h){
        char o;
        long long x=0,y=1;
        o=getchar_unlocked();
        while(!(o<='9'&&o>='0')){
            if(o=='-'){
                y=-1;
            }
            o=getchar_unlocked();
        }
        while(o<='9'&&o>='0'){
            x*=10;
            x+=o-'0';
            o=getchar_unlocked();
        }
        h=x*y;
        return ;
    }
    long long n,lc,rc,ans=1e15,now;
    long long num[10000],tree[110][110];
    int main(){
        ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        read(n);
        memset(tree,0x3f,sizeof(tree));
        for(int i=1;i<=n;i++){
            tree[i][i]=0;
            read(num[i]);
            read(lc);read(rc);
            if(lc){
                tree[i][lc]=tree[lc][i]=1;
            }
            if(rc){
                tree[i][rc]=tree[rc][i]=1;
            }
        }
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    tree[i][j]=min(tree[i][j],tree[i][k]+tree[k][j]);
                }
            }    
        }
        for(int i=1;i<=n;i++){
            now=0;
            for(int j=1;j<=n;j++){
                now+=tree[i][j]*num[j];
            }
            ans=min(now,ans);
        }
        cout<<ans;
        return 0;
    }
    
    
    • -1
      @ 2025-1-19 9:19:48
      #include<bits/stdc++.h>
      using namespace std;
      const int N=110;
      int w[N],g[N][N],n;
       
      int main()
      {
          cin>>n;
          memset(g,0x3f,sizeof(g));
          for(int i=1;i<=n;i++)
          {
              int l,r;
              cin>>w[i]>>l>>r;
              if(l) g[l][i]=g[i][l]=1;
              if(r) g[r][i]=g[i][r]=1;
          }
           
          for(int k=1;k<=n;k++)
              for(int i=1;i<=n;i++)
                  for(int j=1;j<=n;j++)
                      g[i][j]=min(g[i][j],g[k][i]+g[j][k]);
               
          int ans=INT_MAX;
          for(int i=1;i<=n;i++)
          {
              int sum=0;
              for(int j=1;j<=n;j++)
                  if(i!=j) sum+=w[j]*g[i][j];
              ans=min(ans,sum);
          }
          cout<<ans;
          return 0;
      }
      
      • -1
        @ 2024-12-11 21:46:42

        floyd

        #include<bits/stdc++.h>
        using namespace std;
        int len[1000][1000];
        int num[100000];
        int main(){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    len[i][j]=1e9;
            int l,r;
            for(int i=1;i<=n;i++){
                len[i][i]=0;
                cin>>num[i]>>l>>r;
                if(l>0) len[i][l]=len[l][i]=1;
                if(r>0) len[i][r]=len[r][i]=1;
            }
            for(int k=1;k<=n;k++)
                for(int i=1;i<=n;i++)
                    if(i!=k){
                        for(int j=1;j<=n;j++)
                            if(i!=j&&k!=j&&len[i][k]+len[k][j]<len[i][j])
                                len[i][j]=len[i][k]+len[k][j];
                    }
            int Min=INT_MAX;
            for(int i=1;i<=n;i++){
                int s=0;
                for(int j=1;j<=n;j++)
                    s+=len[i][j]*num[j];
                if(s<Min) Min=s;
            }
            cout<<Min;
            return 0;
        }
        
        • 1

        信息

        ID
        5422
        时间
        1000ms
        内存
        125MiB
        难度
        5
        标签
        递交数
        37
        已通过
        19
        上传者