题意:有一个无向连通图,现在问添加一条边后最少还有几个桥分析:先把图缩点,然后重构图为一棵树,求出来树的直径即可,不过注意会有重边,构树的时候注意一下***********************************************************************#pra...
分类:
其他好文 时间:
2015-07-31 23:11:07
阅读次数:
246
如果一个点开始遍历一棵树再回到原点那么每条边走两次。现在是两个人从同一点出发,那么最后遍历完以后两人离得越远越好。最后两人所处位置的路径上的边走了一次,其他边走了两次。要使总路程最小,两人最后停在直径两端。所以最终答案就是总权值*2 - 树的直径 1 #include 2 #include 3 .....
分类:
其他好文 时间:
2015-07-31 12:17:54
阅读次数:
86
Bob’s Race
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2753 Accepted Submission(s): 888
Problem Description
Bob wants to hol...
分类:
其他好文 时间:
2015-07-28 21:20:20
阅读次数:
124
《编程之美》读书笔记12:3.8求二叉树中节点的最大距离问题:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。实际上就是求树的直径。若采用“动态规划方法”思想,会将该问题分解成“具有最大距离两...
分类:
其他好文 时间:
2015-07-28 18:22:39
阅读次数:
109
题目链接: Hdu 4612 Warm up题目描述: 给一个无向连通图,问加上一条边后,桥的数目最少会有几个?解题思路: 题目描述很清楚,题目也很裸,就是一眼看穿怎么做的,先求出来双连通分量,然后缩点重新建图,用bfs求树的直径,直径的长度就是减去桥的数目。这个题目需要手动扩展,而且手动扩展...
分类:
其他好文 时间:
2015-07-24 20:41:21
阅读次数:
92
POJ 1849 Two (树形dp 树的直径 两种方法)...
分类:
其他好文 时间:
2015-07-22 16:18:43
阅读次数:
428
//给一棵双向树,数中边的权值为1,问对于这颗树中走k个节点的最短路径
//如果k小于这颗数的直径加1,那么走k个节点就没有重复的路,如果大于
//那么大于的节点都需要走两遍
#include
#include
#include
#include
using namespace std ;
const int maxn = 100010 ;
int head[maxn] ;
i...
分类:
其他好文 时间:
2015-07-20 13:04:36
阅读次数:
150
解题思路:
求出树的直径的两个端点,则树上每个节点到其他点的最远距离一定是到这两个端点的距离中最长的那一个。
#include
#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
const int MAXN = 100000 + 10;
s...
分类:
其他好文 时间:
2015-07-19 13:35:43
阅读次数:
122
解题思路:
通过两次DFS求树的直径,第一次以任意点作为起点,找到距离该点距离最远的点,则可以证明这个点一定在树的直径上,然后以该点为起点进行DFS得到的最长路就是树的直径。
最后的询问,如果K = D + 1,则需要走直径旁边的分支,每访问一个点距离为2(从直径到这个点,再返回到直径上)。
#include
#include
#include
#include
#include
...
分类:
其他好文 时间:
2015-07-19 11:55:17
阅读次数:
94
HDU4607 树的直径#include
#include
#include
#include
#include
using namespace std;
#define N 100005
#define INF 1<<30
int n,dis[N],E;
bool vis[N];
vector<int...
分类:
编程语言 时间:
2015-05-27 10:07:51
阅读次数:
217