随笔分类 - 

树的直径 图的直径
摘要:[转]http://www.cnblogs.com/hanyulcf/archive/2010/10/23/tree_radius.html树的直径是指树的最长简单路。求法: 两遍BFS :先任选一个起点BFS找到最长路的终点,再从终点进行BFS,则第二次BFS找到的最长路即为树的直径; 原理: 设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点 证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于BFS找到了v矛盾) 2) 如果u不是直径上的点,则u到v必然于树的直径相交(反证),那么交点到v 必然就是直径的后 阅读全文

posted @ 2013-03-12 11:31 龙豆 阅读(599) 评论(0) 推荐(0) 编辑

poj-3253 Fence Repair **
摘要:/* * 3253 Fence Repair.cpp * * Created on: 2011-10-25 * * Huffman + 堆排 * * _int64 让我WA了无数次, 郁闷 * */#include <iostream>using namespace std;const int maxn = 50000 + 5;__int64 len[maxn], n, size;inline int left(int i){ return 2 * i + 1;}inline int right(int i){ return 2 * i + 2;}inline int ... 阅读全文

posted @ 2011-11-12 00:55 龙豆 阅读(299) 评论(0) 推荐(0) 编辑

用二叉树表示表达式
摘要:先看中缀表达式的二叉树表示: /* * 中缀表达式 构建 二叉树 * * 方法: 每次找到“最后计算”的运算符,作为当前树的根,然后递归处理 * 详见 刘汝佳《算法竞赛入门经典》 P198 * */#include <iostream>using namespace std;const int maxn = 1000;//每个节点的左右儿子编号int lch[maxn], rch[maxn];//节点的字符char op[maxn];//节点数int cnt = 0;//s的[x, y)作为范围int buildTree(char *s, int x, int y... 阅读全文

posted @ 2011-10-09 23:10 龙豆 阅读(9109) 评论(0) 推荐(1) 编辑

POI2001 Ants and the ladybug ***
摘要:直接模拟, 刚开始把题意理解错了,以为每次只有一只蚂蚁走,其实正确的是蚂蚁一哄而上,然后按照题意,各只蚂蚁分别在该停的位置停下。 先转一个吧: http://www.byvoid.com/blog/poi-2001-mro/ 做出这道题关键在于读懂题目,尤其是第3条和第4条规则。可以知道,所有蚂蚁是一拥而上的,而且蚂蚁很聪明,它们知道如果在某时一只蚂蚁到瓢虫的路 径与另一只蚂蚁的路径相互包含,就让距离近的蚂蚁继续行进,另一只蚂蚁停留不动。蚂蚁们还会互相礼让,如果要同时进入一个节点,就让编号小的蚂蚁进入,其 它蚂蚁停止不再动。瓢虫会停留在多个位置,但是都是互相不关联的,我们... 阅读全文

posted @ 2011-10-07 00:40 龙豆 阅读(455) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示