题意:给一棵树 选三个点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)的更多相关文章

  1. BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )

    树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...

  2. BZOJ 1509[NOI 2003]逃学的小孩 树形dp

    1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 995  Solved: 505[Submit][Status][ ...

  3. BZOJ1509 [NOI2003]逃学的小孩 树型DP

    题目: 分析: 首先明确我们是要求 min(dist[C][A],dist[C][B])+dist[A][B]. 我们把C当成树根,第一我们可以发现min里面取dist[C][A]或者dist[C][ ...

  4. BZOJ1509 NOI2003 逃学的小孩

    Description: Input: 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的信息.第i+1行包含整数Ui.Vi.Ti(1 ...

  5. BZOJ1509: [NOI2003]逃学的小孩(树的直径)

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1126  Solved: 567[Submit][Status][Discuss] Description ...

  6. 逃学的小孩,树形dp

    先找到题 题意: 中文题,没什么好解释的,也没什么歧义. 分析: 首先我们想一下他的路径将会是怎样的:A-B-C/A-C-B,其实就是求一下min(AB+BC,AC+BC),ABC任选.挺简单,首先证 ...

  7. 【BZOJ1509】[NOI2003]逃学的小孩 直径

    [BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...

  8. [NOI2003]逃学的小孩(树的直径)

    [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...

  9. 【树形DP】NOI2003 逃学的小孩

    题目大意 题目链接 PS:可能出题人为了提高难度故意加了很多废话--实际上题目是很简单的 在一棵树上找3个点A.B.C,使AB+BC最大,且满足AC>AB. 样例输入 4 31 2 12 3 1 ...

随机推荐

  1. POJ1469 COURSES 【二分图最大匹配&#183;HK算法】

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17777   Accepted: 7007 Descript ...

  2. 9种样式CSS3 渐变button集

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  3. Write a program that gives count of common characters presented in an array of strings..(or array of

    转自出处 Write a program that gives count of common characters presented in an array of strings..(or arr ...

  4. Codeforces Round #240 (Div. 1) B. Mashmokh and ACM DP

                                                 B. Mashmokh and ACM                                     ...

  5. [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/72783843?locationNum=9&fps=1 Platform: Rockc ...

  6. mysql自增主键在大量删除后如何重新设置避免断层

    alter table tt auto_increment=8; 表tt mysql> select * from tt; +----+ | id | +----+ | 1 | | 2 | | ...

  7. 利用游标返回结果集的的例子(Oracle 存储过程)JAVA调用方法和.NET调用方法

    在sqlplus中建立如下的内容: 1.程序包 SQL> create or replace package types  2  as  3      type cursorType is re ...

  8. [LeetCode] LRU Cache [Forward]

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  9. BZOJ2038 小Z的袜子 (莫队算法)

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

  10. openstack dnsmasq

    killall dnsmasq systemctl restart openstack-nova-compute /sbin/dnsmasq --conf-file=/var/lib/libvirt/ ...