XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]
这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦……
依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃了。
后来暑假里学了树形DP,做到了一道有关树的直径的题,把相关方面的知识点算是补了一下,不过当时没想起来这道题目。
今天白天(或者说昨天白天?太晚了233333)学了些有关最大流最小割的东西,想补一下省赛的B题(因为看题解上说的是在网络流……),然而发现题目都有点看不懂,简直不知道发生了什么……正在一脸懵逼的时候,瞟到了这道题,突然发现自己好像可以做了?!?!?!?果断吃过饭,下午开搞……然后磕磕盼盼搞到现在,简直不知道是中了什么毒……embarrassing
题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1267
Time Limit : 4000 MS Memory Limit : 65536 KB
In ICPCCamp there were n towns conveniently numbered with 1,2,…,n connected with (n−1) roads. The i-th road connecting towns ai and bi has length ci . It is guaranteed that any two cities reach each other using only roads.
Bobo would like to build (n−1) highways so that any two towns reach each using only highways. Building a highway between towns x and y costs him δ(x,y) cents, where δ(x,y) is the length of the shortest path between towns x and y using roads.
As Bobo is rich, he would like to find the most expensive way to build the (n−1) highways.
Input
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 a i , b i and c i .
- 1≤n≤10 5
- 1≤a i ,b i ≤n
- 1≤c i ≤10 8
- The number of test cases does not exceed 10 .
Output
For each test case, output an integer which denotes the result.
Sample Input
5
1 2 2
1 3 1
2 4 2
3 5 1
5
1 2 2
1 4 1
3 4 1
4 5 2
Sample Output
19
15
Source
XTU OnlineJudge
题意:(睡一觉之后再写……)(嗯,早上来补了)题目给你n座城市,n-1条边(包含{u,v,length}三个性质),然后要一个richman要来建高速路,两座城市间的高速路的造价是这两座城原本的距离;
他想炫富,就要造最贵的n-1条路把这n座城连起来,要求你输出最贵的造价多少。
那我们就想,每座城市肯定最好去连离它最远的那座城市,这样可以保证造价高;
then,我们想到,联想到求树的直径的时候,除了直径的两个端点外,其他的任意点DFS走得最远的那个点就是 one of 直径上的两个点;
那思路就很明确了,求出这棵树的直径,把直径两个端点p1,p2连起来,然后剩下的点,全部连到p1或者p2上(哪个远连哪个),就可以得到题目想要的答案了。
做法是非常暴力的vector邻接表,两次dfs求直径(可以参考http://www.cnblogs.com/dilthey/p/7231438.html),再来一次dfs求距离,最后暴力遍历一遍加一加,搞定。
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
#define MAXN 100000+5
#define cls(array,x) memset(array,x,sizeof(array))
typedef long long ll;
using namespace std;
int n,p1,p2;
struct Edge{
int u,v;
ll w;
};
vector<Edge> E;
vector<int> G[MAXN];
ll d1[MAXN],d2[MAXN],maxd;
int vis[MAXN];
void dfs(int now,ll dist,ll d[])
{
vis[now]=;
d[now]=dist;
for(int i=;i<G[now].size();i++)
{
Edge edge=E[G[now][i]];
int next=edge.v;
if(!vis[next]) dfs(next,dist+edge.w,d);
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
E.clear();
for(int i=;i<=n;i++) G[i].clear();
for(int i=;i<n;i++)
{
int from,to,weight;
scanf("%d%d%d",&from,&to,&weight);
E.push_back((Edge){from,to,weight});
G[from].push_back(E.size()-);
E.push_back((Edge){to,from,weight});
G[to].push_back(E.size()-);
} cls(vis,);
dfs(,,d1);
maxd=;
for(int i=;i<=n;i++) if(d1[i]>maxd) maxd=d1[i],p1=i; cls(vis,);
dfs(p1,,d1);
maxd=;
for(int i=;i<=n;i++) if(d1[i]>maxd) maxd=d1[i],p2=i; cls(vis,);
dfs(p2,,d2); ll ans=d1[p2];
for(int i=;i<=n;i++) if(i!=p1&&i!=p2) ans+=max(d1[i],d2[i]);
printf("%I64d\n",ans);
}
return ;
}
嗯,总之,过程十分暴力,我喜欢……
XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]的更多相关文章
- XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]
2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下…… 题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id ...
- XTU 1260 - Determinant - [2017湘潭邀请赛A题(江苏省赛)][高斯消元法][快速幂和逆元]
是2017江苏省赛的第一题,当时在场上没做出来(废话,那个时候又不懂高斯消元怎么写……而且数论也学得一塌糊涂,现在回来补了) 省赛结束之后,题解pdf就出来了,一看题解,嗯……加一行再求逆矩阵从而得到 ...
- XTU 1261 - Roads - [最小割][2017湘潭邀请赛B题(江苏省赛)]
之前在网上搜了一个下午没搜到这道题的题解,然后同时又对着叉姐写的两行字题解看了一个下午: 虽然基本上已经知道了这题的思路,但愣是因为自己代码实现起来太繁复,外加不确定正确性,没敢码…… 但是一道题肝了 ...
- 2017湘潭大学邀请赛H题(树的直径)
链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE H. Highway The input contains zero or more test cas ...
- 【模板】tyvjP1520 树的直径 [2017年5月计划 清北学堂51精英班Day3]
P1520 树的直径 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 树的直径,即这棵树中距离最远的两个结点的距离.每两个相邻的结点的距离为1,即父亲结点与儿 ...
- HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)
题目链接 2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块. 分块的时候满足每个块是一个 ...
- 2018湘潭邀请赛C题(主席树+二分)
题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...
- 2017 湘潭邀请赛&JSCPC G&J
训练的时候对G想了一个假算法..也有很大可能是写错了.. 下来一看别人的G 看起来很奇妙.. 开始把所有的左括号翻成右括号,然后cost*=-1 这样在优先队列中就是最优的 然后for每一段 如果前缀 ...
- POJ 1849 Two(树的直径--树形DP)(好题)
大致题意:在某个点派出两个点去遍历全部的边,花费为边的权值,求最少的花费 思路:这题关键好在这个模型和最长路模型之间的转换.能够转换得到,全部边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考 ...
随机推荐
- centos下快速安装JDK
Linux系统自带了jdk(当然,如果没有,可以忽略这个步骤),但还是1.4的老版本,所以需要先卸载,然后在安装1.6,卸载步骤如下: [root@localhost ~]# rpm -qa | gr ...
- Log4net用法(App.config配置)
配置文件 <configSections> <section name="log4net" type="log4net.Config.Log4NetCo ...
- Javascript生成GUID算法
var GUID = { date: new Date(), /* 生成GUID码 */ newGUID: function () { this.date = new Date(); var guid ...
- form enctype:"multipart/form-data",method:"post" 提交表单,后台获取不到数据
在解决博问node.js接受参数的时候,发现当form中添加enctype:"multipart/form-data",后台确实获取不到数据,于是跑到百度上查了一下,终于明白为什么 ...
- iOS开发--NSDateFormatter
NSDate对象包含两个部分,日期(Date)和时间(Time).格式化的时间字符串主要也是针对日期和时间的 1.基础用法 NSDate* now = [NSDate date]; NSDateFor ...
- hadoop 随笔
http://p-x1984.iteye.com/blog/859843 面试hadoop可能被问到的问题,你能回答出几个 ? 1.hadoop运行的原理? 2.mapreduce的原理? 3.HDF ...
- [XPath] XPath 与 lxml (三)XPath 坐标轴
本章我们将沿用上一章的 XML 示例文档. XPath 坐标轴 坐标轴用于定义当对当前节点的节点集合. 坐标轴名称 含义 ancestor 选取当前节点的所有先辈元素及根节点. ancestor-or ...
- O2O(online to offline)营销模式
O2O营销模式又称离线商务模式,是指线上营销线上购买带动线下经营和线下消费.O2O通过打折.提供信息.服务预订等方式,把线下商店的消息推送给互联网用户,从而将他们转换为自己的线下客户,这就特别适合必须 ...
- transformClassesWithJarMergingForDebug
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build ...
- 124、@JavascriptInterface
targetSdkVersion 是设置希望的SDK版本,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题 ...