zoukankan      html  css  js  c++  java
  • 2017 Multi-University Training Contest

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6060

    题目:

    RXD and dividing

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
    Total Submission(s): 522    Accepted Submission(s): 219


    Problem Description
    RXD has a tree T, with the size of n. Each edge has a cost.
    Define f(S) as the the cost of the minimal Steiner Tree of the set S on tree T
    he wants to divide 2,3,4,5,6,n into k parts S1,S2,S3,Sk,
    where Si={2,3,,n} and for all different i,j , we can conclude that SiSj=
    Then he calulates res=ki=1f({1}Si).
    He wants to maximize the res.
    1kn106
    the cost of each edge[1,105]
    Si might be empty.
    f(S) means that you need to choose a couple of edges on the tree to make all the points in S connected, and you need to minimize the sum of the cost of these edges. f(S) is equal to the minimal cost 
     
    Input
    There are several test cases, please keep reading until EOF.
    For each test case, the first line consists of 2 integer n,k, which means the number of the tree nodes , and k means the number of parts.
    The next n1 lines consists of 2 integers, a,b,c, means a tree edge (a,b) with cost c.
    It is guaranteed that the edges would form a tree.
    There are 4 big test cases and 50 small test cases.
    small test case means n100.
     
    Output
    For each test case, output an integer, which means the answer.
     
    Sample Input
    5 4 1 2 3 2 3 4 2 4 5 2 5 6
     
    Sample Output
    27
     
    Source
     思路:
      智商感觉被碾压。题解是从整体考虑的,而我一直从局部考虑,试图求出各个集合。。。走远了
      
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define MP make_pair
     6 #define PB push_back
     7 typedef long long LL;
     8 typedef pair<int,int> PII;
     9 const double eps=1e-8;
    10 const double pi=acos(-1.0);
    11 const int K=1e6+7;
    12 const int mod=1e9+7;
    13 
    14 vector<PII>mp[K];
    15 int n,k,sz[K];
    16 LL ans;
    17 void dfs(int u,int f)
    18 {
    19     sz[u]=1;
    20     for(auto v:mp[u])if(f!=v.first) dfs(v.first,u),sz[u]+=sz[v.first];
    21     for(auto v:mp[u])if(f!=v.first) ans+=1LL*v.second*min(sz[v.first],k);
    22 }
    23 int main(void)
    24 {
    25 
    26     while(~scanf("%d%d",&n,&k))
    27     {
    28         ans=0;
    29         memset(mp,0,sizeof mp);
    30         for(int i=1,x,y,z;i<n;i++)
    31             scanf("%d%d%d",&x,&y,&z),mp[x].PB(MP(y,z)),mp[y].PB(MP(x,z));
    32         dfs(1,0);
    33         printf("%lld
    ",ans);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    spring@Async注解实现异步方法调用
    mysql锁机制
    springboot启动时执行任务CommandLineRunner
    java-并发编程之fork/join框架
    mysql explain 执行计划详解
    mysql 时间相关sql , 按天、月、季度、年等条件进行查询
    swagger2 常用注解说明
    VirtualBox 安装CentOS虚拟机网卡配置
    RestFul是啥
    文本内文字字数过多,显示省略号
  • 原文地址:https://www.cnblogs.com/weeping/p/7270894.html
Copyright © 2011-2022 走看看