2017湘潭大学邀请赛H题(树的直径)

时间:2023-01-06 15:24:44

链接: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 - &lbrack;树的直径&rsqb;&lbrack;2017湘潭邀请赛H题&lpar;江苏省赛&rpar;&rsqb;

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

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

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

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

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

  4. POJ 1985 Cow Marathon &lpar;模板题&rpar;&lpar;树的直径&rpar;

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

  5. XTU 1264 - Partial Sum - &lbrack;2017湘潭邀请赛E题&lpar;江苏省赛&rpar;&rsqb;

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

  6. POJ 2631 Roads in the North &lpar;模板题&rpar;&lpar;树的直径&rpar;

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

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

    题目链接  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 - &lbrack;2017湘潭邀请赛A题&lpar;江苏省赛&rpar;&rsqb;&lbrack;高斯消元法&rsqb;&lbrack;快速幂和逆元&rsqb;

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

随机推荐

  1. ThinkPHP中疑难笔记

    不但要记住核心的东西, 还要记住 相关的 东西: 如php cli的版本是 5.6.14 bulit: sep 30, 2015 tp中, 通常说的系统就是框架; 项目就是 "应用程序&qu ...

  2. Windows批处理:自动检查服务器连通性

    该技术与上一篇<自动检查网络连通性>的实现原理相同,我将脚本稍微改动了下,用于检查公司服务器的连通性,简单快捷.在这里附上修改方法. @echo off color 1F title 服务 ...

  3. SqlServer关闭与启用标识&lpar;自增长&rpar;列

    1 --添加新列 2 ALTER TABLE TABLENAME ADD ID int 3 --赋值 4 UPDATE TABLENAME SET ID = IDENTITY_ID 5 --删除标识列 ...

  4. Android使用MVP时应该注意的问题

    生命周期:因为Presenter是View创建的,我们需要确保完全地理解View的生命周期,特别是因为它将最有可能去处理状态更新和异步数据.举个例子,每一个Presenter应该在View destr ...

  5. G711

    G.711就是语音模拟信号的一种非线性量化.细分有二种:G.711 a-lawand G.711 u-law.不同的国家和地方都会选取一种作为自己的标准. G.711a/u bitrate 是64kb ...

  6. WebApi2官网学习记录---Attribute Routing

    从WebApi 1迁移到WebAPI 2要改变配置代码如下: WebApi 1: protected void Application_Start() { // WARNING - Not compa ...

  7. Spark计算模型

    [TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...

  8. Ubuntu 14&period;10 下Hadoop 错误集

    1 FATAL org.apache.hadoop.ha.ZKFailoverController: Unable to start failover controller. Parent znode ...

  9. C&num;下编程完成IIS网络App的权限设置

    转自:http://linwx1978.blog.163.com/blog/static/1504106920101104834271/ 以前的日志中转了不少文章,最近听说转文不是好习惯,决定普世一把 ...

  10. function方法控制是否隐藏部分内容

    $(document).ready(function() { $('input[type=radio][name=IE]').change(function() { if (this.value == ...