• 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 }
  • 相关阅读:
    python 图片验证码降噪
    python 视频配音、剪辑
    Python实现音乐的剪辑
    OpenCV-Python 视频读取
    OpenCV-Python 人脸眼睛嘴识别
    OpenCV-Python 人脸识别
    numpy
    python学习笔记(3)---cookie & session
    python爬虫学习笔记(2)-----代理模式
    python爬虫学习笔记(1)
  • 原文地址:https://www.cnblogs.com/hhxj/p/7239911.html
Copyright © 2020-2023  润新知