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 }
  • 相关阅读:
    MVC3.0 如何点击点击一张图片连接到另一地址
    什么是SMTP?
    ASP.NET MVC中 Jquery AJAX 获取数据利用MVC模型绑定实现输出
    MVC HTML控件扩展例子
    连接局域网内的mysql服务
    python loger 模板
    培养正确的编程态度和方法转
    Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
    SQL中时间与秒互转
    VS开发好用的扩展
  • 原文地址:https://www.cnblogs.com/weeping/p/7270894.html
Copyright © 2011-2022 走看看