解题思路:
通过两次DFS求树的直径,第一次以任意点作为起点,找到距离该点距离最远的点,则可以证明这个点一定在树的直径上,然后以该点为起点进行DFS得到的最长路就是树的直径。
最后的询问,如果K = D + 1,则需要走直径旁边的分支,每访问一个点距离为2(从直径到这个点,再返回到直径上)。
#include
#include
#include
#include
#include
...
分类:
其他好文 时间:
2015-07-19 11:55:17
阅读次数:
94
坑爹...要求最小值要转成最长路来做....小于关系要转化一下 , A A #include#include#include#include#define rep(i, n) for(int i = 0; i to = v, pt->w = w; pt->next = head[u]; head[....
分类:
其他好文 时间:
2015-07-19 11:31:47
阅读次数:
179
比较简单的DP,用记忆化搜索比较简单,递推。。。应该不好写吧 。
很容易发现,对于同一个位置,它的最长路是一定的, 不会变的,因为路是递减的,所以该题很适合用记忆化搜索 。 由此我们也可以发现DP和搜索的联系 。
代码如下:
#include
using namespace std;
int T,r,c,a[105][105],d[105][105];
int dx[] = {0,1,...
分类:
其他好文 时间:
2015-07-17 22:47:06
阅读次数:
122
#ifndef LONG_PATH_H#define LONG_PATH_H#include#include#define MAX 65535int graphPath_longest(int (*Graph)[5],int Length,int origin,int destin ); void ...
分类:
其他好文 时间:
2015-07-17 20:54:10
阅读次数:
212
上一篇文章即是对这一主题的变化。并给出了一个非递归溶液。我给出原题的一种递归解法。将会看到,现比較上篇博文。今天给出的递归解法的代码实现是相当简洁的。问题描写叙述:假设我们把二叉树看成一个图。父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序。求一棵二叉树中相距最远...
分类:
其他好文 时间:
2015-07-15 10:55:51
阅读次数:
98
/*
给你 n 个区间 [Ai, Bi],要求从每个区间中至少选出 Ci 个数出来组成一个序列
问:满足上面条件的序列的最短长度是多少?
则对于 不等式 f(b)-f(a)>=c,建立 一条 b 到 a 的边 权值为 c,则求的最长路 即为 最小值(集合)
并且有隐含条件:0<=f(a)-f(a-1)<=1 则有边权关系(a,a-1,0)以及(a-1,a,-1);
*/
/*
...
分类:
其他好文 时间:
2015-07-14 11:25:21
阅读次数:
101
POJ 1201 Intervals(差分约束+spfa 求最长路径)...
分类:
其他好文 时间:
2015-07-12 11:14:06
阅读次数:
149
显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的)。但是看了一下数据大小,应该会TLE。然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径。结果灵感就来了,主要思路是对于每个结点,第一次dfs得到两个变量到P结点的最大值以及次大值。然后,第二次dfs对...
分类:
其他好文 时间:
2015-07-11 21:20:29
阅读次数:
107
题目链接:
poj3592
题意:
给出一幅n X m的二维地图,每个格子可能是矿区,障碍,或者传送点 用不同的字符表示;
有一辆矿车从地图的左上角(0,0)出发,只能往右走或往下走,或者通过传送点 选择是否 传送到特定地点
采过的矿的格子 矿会消失;问这辆矿车最多能采多少矿
解题思路:
首先重新建图,将图中二维的顶点压缩成一维的顶点 ...
分类:
其他好文 时间:
2015-07-10 22:27:43
阅读次数:
184
题目链接:hdu 2196题目大意:有n台电脑,每台电脑之间都用电缆相连,当然了这是n-1边树。然后问每台电脑所能到达的最远电脑的距离。思路:首先第一反应思路有点像单源最长路径。。。但是有n台电脑,都来一发估摸着n^2logn的时间复杂度(果断t了)。后来想想又有点树的分治的感觉,分枝节处理,,,,...
分类:
其他好文 时间:
2015-07-10 14:57:17
阅读次数:
134