链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE

H. Highway

The input contains zero or more test cases and is terminated by end-of-file. For each test case: The first line contains an integer n. The i-th of the following (n − 1) lines contains three integers ai , bi and ci

. • 1 ≤ n ≤ 105

• 1 ≤ ai , bi ≤ n

• 1 ≤ ci ≤ 108

• The number of test cases does not exceed 10.

题意:

每次连接最远的两点,直到所有点都相通。

最多有n-1条边

题解:

如何每次都找到最远的两个点呢?

我们需要用到一个定理:树上的任何一个点的最远点一定会是<树的直径>中的一个

树的直径指:树上的最远的两个点

接下来我们证明这个定理——

1,利用这个定理,我们可以从<1节点>dfs找到一个直径上的点。

2,用直径上的这个点dfs可以找到另外一个直径上的点。

3,找出所有点到这两个直径上的点的距离

4,将所有点都连接在直径的两个点之一,就是答案了

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int f[maxn],nex[2*maxn],w[2*maxn],tob[2*maxn],inde;
long long dis1[maxn],dis2[maxn];
bool vis[maxn];
long long s1,maxdis,s2;
long long madis=-1;
void add(int a,int b,int wn)
{
inde++;
tob[inde]=b;
w[inde]=wn;
nex[inde]=f[a];
f[a]=inde;
}
void dfs1(int x,long long v)
{
vis[x]=0;
for(int i=f[x];i;i=nex[i])
{
if(vis[tob[i]])
{
long long gg=v+w[i];
if(gg>madis)
{ madis=gg;
s1=tob[i];
}
dfs1(tob[i],gg);
}
}
}
void dfs2(int x,long long v)
{
vis[x]=0;
for(int i=f[x];i;i=nex[i])
{
if(vis[tob[i]])
{
long long gg=v+w[i];
if(gg>maxdis)
{
maxdis=gg;
s2=tob[i];
}
dis1[tob[i]]=gg;
dfs2(tob[i],gg);
}
}
}
void dfs3(int x,long long v)
{
vis[x]=0;
for(int i=f[x];i;i=nex[i])
{
if(vis[tob[i]])
{
long long gg=v+w[i];
dis2[tob[i]]=gg;
dfs3(tob[i],gg);
}
}
}
int main()
{
int n;
while(cin>>n)
{
inde=0;
for(int i=1;i<=n;i++)f[i]=0;
for(int i=1;i<n;i++)
{
int a,b,wn;
scanf("%d %d %d",&a,&b,&wn);
add(a,b,wn);
add(b,a,wn);
}
maxdis=madis=-1;
for(int i=1;i<=n;i++)vis[i]=1;
dfs1(1,0);
for(int i=1;i<=n;i++)vis[i]=1;
dfs2(s1,0);
for(int i=1;i<=n;i++)vis[i]=1;
dfs3(s2,0);
long long ans=maxdis;
for(int i=1;i<=n;i++)
{
if(i==s1||i==s2)continue;
ans+=max(dis1[i],dis2[i]);
}
cout<<ans<<endl;
}
return 0;
}

  

2017湘潭大学邀请赛H题(树的直径)的更多相关文章

  1. XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]

    这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...

  2. 2017湘潭大学邀请赛E题(贪心)

    链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE Partial Sum Input The input contains zero or more t ...

  3. 2017湘潭大学邀请赛G题(贪心+优先队列)

    参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...

  4. POJ 1985 Cow Marathon (模板题)(树的直径)

    <题目链接> 题目大意: 给定一颗树,求出树的直径. 解题分析:树的直径模板题,以下程序分别用树形DP和两次BFS来求解. 树形DP: #include <cstdio> #i ...

  5. XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]

    2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下…… 题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id ...

  6. POJ 2631 Roads in the North (模板题)(树的直径)

    <题目链接> 题目大意:求一颗带权树上任意两点的最远路径长度. 解题分析: 裸的树的直径,可由树形DP和DFS.BFS求解,下面介绍的是BFS解法. 在树上跑两遍BFS即可,第一遍BFS以 ...

  7. HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)

    题目链接  2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块.    分块的时候满足每个块是一个 ...

  8. HDU 4597 Play Game 2013 ACM-ICPC吉林通化全国邀请赛H题

    九野的博客,转载请注明出处:  http://blog.csdn.net/acmmmm/article/details/10833941 题意:给定T个测试数据,下面有2副牌,每副n张,每张都有一个分 ...

  9. XTU 1260 - Determinant - [2017湘潭邀请赛A题(江苏省赛)][高斯消元法][快速幂和逆元]

    是2017江苏省赛的第一题,当时在场上没做出来(废话,那个时候又不懂高斯消元怎么写……而且数论也学得一塌糊涂,现在回来补了) 省赛结束之后,题解pdf就出来了,一看题解,嗯……加一行再求逆矩阵从而得到 ...

随机推荐

  1. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  2. 关于getdate()的不同的日期格式

    在使用Sql Server查询数据库时,我们经常会需要查询日期格式的数据,对于日期在sql语言中的格式有一定的要求,通过修改convert中的最后一位参数,可以返回不通格式的时间,具体实现如下: Se ...

  3. Python 入门:基本语法

    对于多数从其他编程语言转入Python的来说,或多或少会有些不习惯.如果沿用其他编程语言的语法来写Python代码,那么碰壁是不可避免的了. 本文是基于我看了两个小时的官方文档(Python 2.7 ...

  4. Sublime Text 2 配置PHP调试环境(在windows环境下)

    1:PHP安装,配置环境变量 PHP安装略过- 2:下载Sublime Text 2 下载地址:http://www.sublimetext.com/2 ,选择自己合适的版本 3:点击 sublime ...

  5. February 13th, 2018 Week 7th Tuesday

    You are your greatest asset. 你就是你自己最大的资本. For most of us, there are few things that we can count on ...

  6. [福大软工] Z班 第6次成绩排行榜

    作业要求 http://www.cnblogs.com/easteast/p/7668890.html 作业评分 本次作业从引言(5 ') . 用户场景(15 ').类图(10 ').界面原型(15 ...

  7. 【Linux基础】VI命令模式下大小写转换

    [开始位置] ---- 可以指定开始的位置,默认是光标的当前位置 gu ---- 把选择范围全部小写 gU ---- 把选择范围全部大写 [结束位置] ---- 可以跟着类似的w,6G,gg等定位到错 ...

  8. sftpdrive mtputty

    https://blog.csdn.net/junli_chen/article/details/77527250?locationNum=2&fps=1

  9. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创  2017-08-26  翟永超  Spring Cloud 被围观 ...

  10. Linux三剑客-AWK

    1.什么是awk AWK是一种处理文本文件的语言,是一个强大的文本分析工具.有统计和计算功能. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Br ...