摘要: http://poj.org/problem?id=1985题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长)分析:1、树形dp:只要考虑根节点和子节点的关系就可以了2、两次bfs: ①任意从一个点u出发bfs,设其能到的最远点为v ②从v出发重新bfs,设其能到达的最远点为s ③则树的直径就是v->s证明: 若能证明从任意一个点出发,bfs到的最远点一定在树的直径的端点上,那么第二次bfs就可以证明一定正确了,下面来证明第一次bfs正确性: ①若选择的点u在直径上,那么能到的最远点v一定是树的直径的端点之一 反证: 若v不是树的直径的端点,设树的直径的端点... 阅读全文
posted @ 2014-03-11 23:24 Chellyutaha 阅读(441) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2375题意:一个500*500的矩形,每个格子都有一个高度,不能从高度低的格子滑到高度高的格子(但相等高度可以滑),已知可以在2个相邻格子上加桥,使得无视他们的高度就可以互相滑,问最少加多少桥可以使得在任一个格子上都能到达任一个格子。分析:很容易看出这就是相当于在一个有向图上至少加多少边可以使得其强联通,ans=max(入度0的点数,出度为0的点数),很好理解,可以把出度为0的点挂一条边到入度为0的点上,多了的随便挂。那么现在面临的问题的就是要把25000个点先求强连通分量缩点,但是一般的算法会爆栈(其实手写栈也行……),那么鉴于这图的特殊 阅读全文
posted @ 2014-03-11 22:43 Chellyutaha 阅读(251) 评论(0) 推荐(0) 编辑