zoukankan      html  css  js  c++  java
  • hdu 4118

    题意:一颗树,每个点都有一个人,每个人都去旅游,住在其他人的家里,每个人不能住重复的,原始位置和住的位置的距离为旅游的距离,问所有人的最大旅游距离

    思路:对于当前的这条边,走过的人数为边左右最少人数(即点数),跑一遍即可

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e5+10;
     4 typedef long long ll;
     5 struct node{
     6     int x,y;
     7     node(int xx,int yy){
     8         x=xx;y=yy;
     9     }
    10 };
    11 struct is{
    12     int x,y,z;
    13 }a[N];
    14 vector<node> e[N];
    15 int dp[N];
    16 
    17 void dfs(int u){
    18     dp[u]++;
    19     for(int i=0;i<e[u].size();i++){
    20         node p=e[u][i];
    21         if(!dp[p.x]){
    22             dfs(p.x);
    23             dp[u]+=dp[p.x];
    24         }
    25     }
    26 }
    27 int main(){
    28     int t;
    29     int n,x,y,z;
    30     cin>>t;
    31     int kk=1;
    32     while(t--){
    33         memset(dp,0,sizeof(dp));
    34         for(int i=0;i<N;i++) e[i].clear();
    35         scanf("%d",&n);
    36         for(int i=1;i<n;i++){
    37             scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
    38             e[a[i].x].push_back(node(a[i].y,a[i].z));
    39             e[a[i].y].push_back(node(a[i].x,a[i].z));
    40         }
    41         dfs(1);
    42         ll sum=0;
    43         for(int i=1;i<n;i++){
    44             int k=min(dp[a[i].x],dp[a[i].y]);
    45             sum+=min(n-k,k)*a[i].z;
    46         }
    47         printf("Case #%d: ",kk++);
    48         cout<<sum*2<<endl;
    49     }
    50 }
  • 相关阅读:
    Js获取URL中的QueryStirng字符串
    GridView分页操作
    c语言string的函数
    char *a 与char a[] 的区别
    htonl(),htons(),ntohl(),ntons()--大小端模式转换函数
    nfs 原理详解
    NFS和mount常用参数详解 本文目录
    网络安全过滤软件
    SNMP协议详解
    win7开启snmp服务
  • 原文地址:https://www.cnblogs.com/hhxj/p/7239911.html
Copyright © 2011-2022 走看看