BZOJ1509: [NOI2003]逃学的小孩 (树形DP)
题意:给一棵树 选三个点A,B,C 求A到B的再从B到C的距离最大值 需要满足AB的距离小于AC的距离
题解:首先树上的最大距离就想到了直径 但是被样例误导了TAT
BC两点构成了直径 我一开始以为A在直径上答案最大 然后再加上最接近路径长度一半的路径
其实 A不在直径上的话显然更优啊...
那么做法就是先求出直径 然后记录路径 枚举路上的每一个点能到达的最远的路径
当然这个最远路径不能和直径有公共边
复杂度的话想想还挺有意思的 从直径上走刚好遍历整棵树
总结:突然发现这个题数据水了..
我这个写法 在枚举直径路上的点的时候每一次都暴力memset
假设这棵树是一条链肯定会超时的...
如果这样的话写法就应该枚举每个点的时候把dfs到的点放进数组里
然后再把这些点手动清空 反正过了 懒得改了..
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;
typedef long long ll; int n, m, l, r, cnt, num, rt;
ll ans1, ans2, zd; struct node
{
int to, nex, val;
}E[];
int head[];
int pre[];
int vis[];
int lian[];
ll dis[];
ll diss[]; void dfs(int x, int fa)
{
pre[x] = fa;
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int v = E[i].to;
if(v == fa) continue;
dis[v] = dis[x] + E[i].val;
dfs(v, x);
}
if(dis[x] > dis[rt]) rt = x;
} void dfs1()
{
int x = r;
while(x != pre[l])
{
num++; lian[num] = x;
vis[x] = ;
x = pre[x];
}
} void dfs2(int x, int fa)
{
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int v = E[i].to;
if(v == fa) continue;
if(vis[v]) continue; diss[v] = diss[x] + E[i].val;
dfs2(v, x);
}
zd = max(zd, diss[x]);
} int main()
{
ans1 = ; ans2 = ;
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++)
{
int u, v, o; scanf("%d%d%d", &u, &v, &o);
E[++cnt].to = v; E[cnt].nex = head[u]; head[u] = cnt; E[cnt].val = o;
E[++cnt].to = u; E[cnt].nex = head[v]; head[v] = cnt; E[cnt].val = o;
}
dfs(, -); l = rt;
memset(dis, , sizeof(dis));
dfs(rt, -); r = rt;
ans1 = dis[r]; dfs1();
for(int i = ; i <= num; i++)
{
memset(diss, , sizeof(diss)); zd = ;
dfs2(lian[i], -);
ll tmp = zd + min(dis[lian[i]], ans1 - dis[lian[i]]);
ans2 = max(ans2, tmp);
}
printf("%lld\n", ans1 + ans2);
return ;
}
BZOJ1509: [NOI2003]逃学的小孩 (树形DP)的更多相关文章
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )
树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...
- BZOJ 1509[NOI 2003]逃学的小孩 树形dp
1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 995 Solved: 505[Submit][Status][ ...
- BZOJ1509 [NOI2003]逃学的小孩 树型DP
题目: 分析: 首先明确我们是要求 min(dist[C][A],dist[C][B])+dist[A][B]. 我们把C当成树根,第一我们可以发现min里面取dist[C][A]或者dist[C][ ...
- BZOJ1509 NOI2003 逃学的小孩
Description: Input: 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的信息.第i+1行包含整数Ui.Vi.Ti(1 ...
- BZOJ1509: [NOI2003]逃学的小孩(树的直径)
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 567[Submit][Status][Discuss] Description ...
- 逃学的小孩,树形dp
先找到题 题意: 中文题,没什么好解释的,也没什么歧义. 分析: 首先我们想一下他的路径将会是怎样的:A-B-C/A-C-B,其实就是求一下min(AB+BC,AC+BC),ABC任选.挺简单,首先证 ...
- 【BZOJ1509】[NOI2003]逃学的小孩 直径
[BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...
- [NOI2003]逃学的小孩(树的直径)
[NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...
- 【树形DP】NOI2003 逃学的小孩
题目大意 题目链接 PS:可能出题人为了提高难度故意加了很多废话--实际上题目是很简单的 在一棵树上找3个点A.B.C,使AB+BC最大,且满足AC>AB. 样例输入 4 31 2 12 3 1 ...
随机推荐
- 2013:Audio Tag Classification - MIREX Wiki
Contents [hide] 1 Description 1.1 Task specific mailing list 2 Data 2.1 MajorMiner Tag Dataset 2.2 M ...
- STM32学习之路-感觉自己走到了一个天大的坑里了!
先前兴致勃勃的来弄16位并口驱动LCD.本以为就须要改下LCD IC的初始化即可了,没想到弄了这么多天最终发现自己走进了一个深坑了 T T 原因是我的开发板是奋斗V5的, 它确实有MCU外扩IO口, ...
- 公钥加密,摘要算法MD5,SSH相关概念
1.公钥加密,又叫非对称加密,一般指的是用一组密钥来保证通信的安全.(公钥,私钥)成对存在且惟一,典型的公钥算法有 RSA(计算出的是1024位,128字节),顺便提一下与公钥加密算法相对应的就是传统 ...
- Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)
今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...
- 并不对劲的[noi2006]网络收费
题目略长,就从大视野上复制了. 听上去好像费用流,然而…… ***************************表示略长的题目的分界线************************ 1495: [ ...
- HTTP请求错误码大全(转)
一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...
- maven仓库管理
maven仓库管理很重要,如果是依赖jar下不到或下错了或出现莫名的报错.曾几何时为此花费了不少时间. 首先,注意自己maven仓库配置,里面有本地仓库目录和远程maven仓库,当自己本地没有依赖时可 ...
- maven pom 详细配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- redis简介及常见问题
目录 简介 特点 优点 高性能 高并发 为什么要用 redis 而不用 map/guava 做缓存? redis 和 memcached 的区别 Redis快的原因 为什么redis是单线程 为什么r ...
- 基于ASP.Net Core开发一套通用后台框架记录-(数据库设计(权限模块))
写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...