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 }
  • 相关阅读:
    vim how to set nu with 0-index instead of 1-index
    @property的介绍与使用
    X[:,0]和X[:,1]
    the best guide for git
    sorted(列表)
    Java的匿名函数
    成员变量和局部变量的区别
    Java数组合并
    Java中random的使用
    Git常见错误---git branch不显示本地分支的问题
  • 原文地址:https://www.cnblogs.com/hhxj/p/7239911.html
Copyright © 2011-2022 走看看