BZOJ 1509: [NOI2003]逃学的小孩
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1509
直接求出树的直径,枚举每个点更新一遍答案。
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #define maxn 200500
- #define rep(i,l,r) for (int i=l;i<=r;i++)
- #define down(i,l,r) for (int i=l;i>=r;i--)
- #define clr(x,y) memset(x,y,sizeof(x))
- #define eps 1e-8
- #define ll long long
- #define mm 999911659
- using namespace std;
- struct data{int obj,pre; ll c;
- }e[maxn*];
- int head[maxn],tot,s,t,n,m;
- ll dis[maxn],dis2[maxn],dis3[maxn],ans;
- ll read(){
- ll x=,f=; char ch=getchar();
- while (!isdigit(ch)){if (ch=='-') f=-; ch=getchar();}
- while (isdigit(ch)) {x=x*+ch-''; ch=getchar();}
- return x*f;
- }
- void insert(int x,int y,ll z){
- e[++tot].obj=y; e[tot].pre=head[x]; e[tot].c=z; head[x]=tot;
- }
- void dfs(int u,int fa){
- for (int j=head[u];j;j=e[j].pre){
- int v=e[j].obj;
- if (v!=fa){
- dis[v]=dis[u]+e[j].c;
- if (dis[v]>dis[s]) s=v;
- dfs(v,u);
- }
- }
- }
- void dfs2(int u,int fa){
- for (int j=head[u];j;j=e[j].pre){
- int v=e[j].obj;
- if (v!=fa){
- dis2[v]=dis2[u]+e[j].c;
- if (dis2[v]>dis2[t]) t=v;
- dfs2(v,u);
- }
- }
- }
- void dfs3(int u,int fa){
- for (int j=head[u];j;j=e[j].pre){
- int v=e[j].obj;
- if (v!=fa){
- dis3[v]=dis3[u]+e[j].c;
- ans=max(ans,min(dis3[v],dis2[v])+dis2[t]);
- dfs3(v,u);
- }
- }
- }
- int main(){
- n=read(); m=read();
- rep(i,,m){
- int x=read(),y=read();
- ll z=read();
- insert(x,y,z); insert(y,x,z);
- }
- dfs(,);
- dfs2(s,);
- dfs3(t,);
- printf("%lld\n",ans);
- return ;
- }
BZOJ 1509: [NOI2003]逃学的小孩的更多相关文章
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )
树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...
- 1509: [NOI2003]逃学的小孩 - BZOJ
Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的信息.第i+1行包含整数Ui.Vi.Ti(1Ui ...
- 【BZOJ1509】[NOI2003]逃学的小孩 直径
[BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...
- [NOI2003]逃学的小孩(树的直径)
[NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...
- BZOJ1509 & 洛谷4408:[NOI2003]逃学的小孩——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1509 https://www.luogu.org/problemnew/show/P4408 sb ...
- 洛谷 P4408 [NOI2003]逃学的小孩
题目传送门 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚, ...
- NOI2003 逃学的小孩
这一题不会做啊…… 我觉得真要比赛的话我可能会随机上几万次,然后再用LCA求距离,更新最优值,等到快超时的时候输出答案…… 题解请看2007年陈瑜希论文 代码: ; type node=record ...
- 解题报告 『[NOI2003]逃学的小孩(树上操作)』
原题地址 今天翻看集训队巨佬写的一篇有关于树形动规的论文时看到了这道题,但感觉并不需要用动规,求出树的直径再暴力枚举一下就搞出来了. 其实是因为我太弱了,看不懂大佬在写什么orz 代码实现如下: #i ...
- LUOGU P4408 [NOI2003]逃学的小孩(树的直径)
题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚,他们决定在尽 ...
随机推荐
- iOS Label 自适应高度
推荐第二个 测试一,只改变numberOfLines属性,label的高度不会自适应(会有text中的一部分内容称为......) NSString *str = @"jgreijgirje ...
- iOS知识点、面试题 之二
最近面试,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/ ...
- bzoj 4289: PA2012 Tax
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- JS画几何图形之二【圆】
半径为r的圆上的点p(x,y)与圆心O(x0,y0)的关系: x = x0+rcosA; y = y0+rsinA ,A为弧度 样例:http://www.zhaojz.com.cn/demo/dr ...
- JavaScript的简单入门
一.导读 简介:JavaScript简称js,是基于对象和事件驱动的脚本语言,主要运用于客户端.原名LiveScript,本身和Java没有任何关系,但语法上很类似. 特点:交互性(它可以做的就是信息 ...
- 基于编辑距离来判断词语相似度方法(scala版)
词语相似性比较,最容易想到的就是编辑距离,也叫做Levenshtein Distance算法.在Python中是有现成的模块可以帮助做这个的,不过代码也很简单,我这边就用scala实现了一版. 编辑距 ...
- Python,PyCharm2017安装教程,包含注册码
一,安装PyCharm 1.下载PyCharm 进入https://www.jetbrains.com/pycharm/download/#section=windows官网下载页面,可以到到PyCh ...
- canvas 简易的加载进度条
做一个web app,想在第一次或者更新的时候,有一个更新进度条,我个人比较喜欢圆的那种. canvas + svg高低配,应该还不错的.顺便一提,canvas用来压缩图片也是么么哒的. 先看下效果图 ...
- Python正则表达式返回首次匹配到的字符及查询的健壮性
re.findall(pattern,string)会搜索所有匹配的字符,返回的是一个列表,获取首个匹配需要re.findall(pattern,string)[0]访问, 但是如果findall没匹 ...
- Python爬虫知识点一
一.入门知识: 1.1.HTTP简介HTTP = HyperText Transfer ProtocolURI = Uniform Resource IdentifierURL = Uniform R ...