2 条题解

  • 0
    @ 2025-10-8 16:55:49
    #include <bits/stdc++.h>
    using namespace std;
    const int N=1010;
    
    struct Node{int fa,last,nxt,siz;double w,sw;}a[N];
    priority_queue< pair<double ,int > >q;
    bool vis[N];
    
    int main()
    {
        int n,rt;scanf("%d%d",&n,&rt);
        for(int i=1;i<=n;++i)
        {
            scanf("%lf",&a[i].w);
            a[i].last=i;
            a[i].sw=a[i].w;
            a[i].siz=1;
            if(i!=rt) q.push({a[i].w,i});
        }
        for(int i=1,x,y;i<n;++i) scanf("%d%d",&x,&y),a[y].fa=x;
        memset(vis,0,sizeof(vis));
        while(!q.empty())
        {
            int x=q.top().second;q.pop();
            if(vis[x]) continue;
            vis[x]=1;
            int tx=a[x].fa;while(vis[tx] && tx!=rt) tx=a[tx].fa;
    
            a[a[tx].last].nxt=x;
            a[tx].last=a[x].last;
    
            a[tx].siz+=a[x].siz;
            a[tx].sw+=a[x].sw;
    
            if(tx!=rt) q.push({ a[tx].sw/a[tx].siz , tx });
        }
    
        int ans=0;for(int i=1,x=rt;i<=n;++i,x=a[x].nxt) ans+=i*a[x].w;
    
        printf("%d\n",ans);
    	
    	return 0;
    }
    
    • 0
      @ 2025-10-8 16:55:41
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1010;
      
      struct Node{int fa,last,nxt,siz;double w,sw;}a[N];
      priority_queue< pair<double ,int > >q;
      bool vis[N];
      
      int main()
      {
          int n,rt;scanf("%d%d",&n,&rt);
          for(int i=1;i<=n;++i)
          {
              scanf("%lf",&a[i].w);
              a[i].last=i;
              a[i].sw=a[i].w;
              a[i].siz=1;
              if(i!=rt) q.push({a[i].w,i});
          }
          for(int i=1,x,y;i<n;++i) scanf("%d%d",&x,&y),a[y].fa=x;
          memset(vis,0,sizeof(vis));
          while(!q.empty())
          {
              int x=q.top().second;q.pop();
              if(vis[x]) continue;
              vis[x]=1;
              int tx=a[x].fa;while(vis[tx] && tx!=rt) tx=a[tx].fa;
      
              a[a[tx].last].nxt=x;
              a[tx].last=a[x].last;
      
              a[tx].siz+=a[x].siz;
              a[tx].sw+=a[x].sw;
      
              if(tx!=rt) q.push({ a[tx].sw/a[tx].siz , tx });
          }
      
          int ans=0;for(int i=1,x=rt;i<=n;++i,x=a[x].nxt) ans+=i*a[x].w;
      
          printf("%d\n",ans);
      	
      	return 0;
      }
      • 1

      *【贪心】给树染色[UVA1205]Color a Tree

      信息

      ID
      1139
      时间
      1000ms
      内存
      64MiB
      难度
      2
      标签
      递交数
      41
      已通过
      27
      上传者