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 }
  • 相关阅读:
    Maven进价:Maven构建系列文章
    mybatis.net insert 返回主键
    IIS限制ip访问
    mybatis学习资源
    MVC4发布到IIS,出现HTTP 错误 404.0
    ElasticSearch 7.4.2 Root mapping definition has unsupported parameters
    钉钉网页版全屏
    sudo go 找不到命令
    ubuntu安装navicat
    golang 自动下载所有依赖包
  • 原文地址:https://www.cnblogs.com/weeping/p/7270894.html
Copyright © 2011-2022 走看看