hdu2196 Computer待续
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,first[],to[],next[],val[],cnt;
inline void add(int u,int v,int w)
{
to[++cnt]=v;
next[cnt]=first[u];
first[u]=cnt;
val[cnt]=w;
}
int dp[][],depth1[],depth2[];
int dfs1(int x,int fa)
{
for(int i=first[x];i;i=next[i])
{
int v=to[i];
if(v==fa)continue;
dp[x][]=max(dfs(v)+val[i],dp[x][]);
}
return dp[x][];
}
int vis[];
int dfs2(int x,int fav)
{
int max1=,max2=;
int flag1,flag2;
if(vis[x])continue;
for(int i=first[x];i;i=next[i])
{
int v=to[i];
if(vis[v])continue;
int tmp=dp[v][]+val[i];
if(tmp>max1)
{
max2=max1;
max1=tmp;
flag2=flag1;
flag1=v;
}
if(tmp==max1 || tmp>max2)
{
max2=max1;
max1=tmp;
flag2=v;
}
}
if(x!=)
{
int tmp=dp[x][];
int v=-;
if(tmp>max1)
{
max2=max1;
max1=tmp;
flag2=flag1;
flag1=v;
}
if(tmp==max1 || tmp>max2)
{
max2=max1;
max1=tmp;
flag2=v;
}
}
for(int i=first[x];i;i=next[i])
{
int v=to[i];
if(v==flag1)
dp[x][]=max2+val[i];
else dp[x][]=max1+val[i];
dfs2(v,val[i]);
}
}
int main()
{
n=read();
for(int i=;i<n;i++)
{
int u,v,w;
u=read();v=read();w=read();
add(u,v,w);add(v,u,w);
}
dfs1(,-);
}
hdu2196 Computer待续的更多相关文章
- hdu2196 Computer【树形DP】【换根法】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【HDU2196 Computer】经典树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:有n台电脑相连,让你求每台电脑与离它最远的那台电脑的距离. 思路:两遍搜索即可,第一遍从上到下,第二 ...
- HDU2196 Computer(树形DP)
和LightOJ1257一样,之前我用了树分治写了.其实原来这题是道经典的树形DP,感觉这个DP不简单.. dp[0][u]表示以u为根的子树中的结点与u的最远距离 dp[1][u]表示以u为根的子树 ...
- HDU-2196 Computer (树形DP)
题目大意:在一棵带边权的有根树中,对于每个点,找出它与离它最远的那个点的之间的距离. 题目分析:对于一个点,离它最远的点只有两种情况,一是它到叶子节点的最远距离,一是与它父亲的距离加上他的父亲到叶子节 ...
- HDU2196 - Computer(树形DP)
题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...
- [hdu2196]Computer树的直径
题意:求树中距离每个节点的最大距离. 解题关键:两次dfs,第一次从下向上dp求出每个节点子树中距离其的最大距离和不在经过最大距离上的子节点上的次大距离(后序遍历),第二次从上而下dp求出其从父节点过 ...
- [HDU2196]Computer(DP)
传送门 题意 给出一棵树,求离每个节点最远的点的距离 思路 对于我这种菜鸡,真是难啊. 每个点的距离它最远的点,除了在它子树中的,还有在它子树之外的,所以这几个状态都得表示出来. 我们能够很简单的求出 ...
- HDU2196 Computer【换根dp】
题目传送门 题意: 给定一个$N$个点的树,第$i$条边的长度是$A_i$,求每个点到其他所有点的最长距离.数据范围:$n ≤ 10000$,$A_i ≤ 10_9$ 分析 首先,从随便哪个节点($1 ...
- HDU2196 Computer (树形DP-换根)
dp[u][0]表示u向下走的最大距离: dp[u][1]表示u向下走的次大距离: dp[u][2]表示u向上走的最大距离: 最后的答案就是每个点的max(dp[u][0],dp[u][2]); 求解 ...
随机推荐
- web安全之SQL注入---第五章 如何预防SQL注入 ?
5-1严格检查输入变量的类型和格式总结:其实就是做一些判断正则表达式:验证密码:/^[a-zA-Z]{6,}$/5-1严格检查输入变量的类型和格式总结:其实就是做一些判断正则表达式:验证密码:/^[a ...
- mysqldump命令使用详解
mysqldump是一个数据库备份程序 用法:mysqldump [options] [db_name [tbl_name ...]] 描述:mysqldump是一个客户端逻辑备份的工作,备份的SQL ...
- 从零开始写一个Exporter
前言 上一篇文章中已经给大家整体的介绍了开源监控系统Prometheus,其中Exporter作为整个系统的Agent端,通过HTTP接口暴露需要监控的数据.那么如何将用户指标通过Exporter的形 ...
- python 基础 9.11 更改数据
#/usr/bin/python #-*- coding:utf-8 -*- #@Time :2017/11/24 4:45 #@Auther :liuzhenchuan #@File :更改 ...
- lua(简单的传参)
#include <iostream> #include <string.h> extern "C" { /*头文件lua.h定义了Lua提供的基础函数,包 ...
- CMD命令获取电脑所有连接过的WiFi密码
cmd中输入命令:for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo ...
- 九度OJ 1335:闯迷宫 (BFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1782 解决:483 题目描述: sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫. sun的室友在帮电脑节设计 ...
- 洛谷 2233 [HNOI2002]公交车路线
题目戳这里 一句话题意 一个大小为8的环,求从1到5正好n步的方案数(途中不能经过5). Solution 巨说这个题目很水 应该是比较容易的DP,直接从把左边和右边的方案数加起来即可,但是有几个需要 ...
- 安装Eclipsemaven插件
Maven的Eclipse插件m2eclipse的安装 The goal of the m2ec project is to provide a first-class Apache Maven su ...
- ABAP面试经历【转http://blog.csdn.net/tsj19881202/article/details/8792742】
本周三面试了一次HP的globe部门,整个过程自己感觉特别糟糕.总结了一下经验, 1.不能把自己平时做的东西,很好的用语言描述出来 2.技术点其实都会,但是不了解对方问题的意思,所以没能很好的回答对方 ...