摘要:
题目链接这题跟Balance Act那题差不多,求图的质点。我直接将那题改了一下提交,结果PE了一次,又WA了一次,最后发现是单case,多case的提交为什么WA呢?View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <vector> 4 #define N 16000 5 #define MAX(a,b) ((a)>(b)?(a):(b)) 6 using namespace std; 7 vector<int> g[N]; 8 int n,p[N],d[N], 阅读全文
posted @ 2012-05-02 21:59
BeatLJ
阅读(260)
评论(0)
推荐(0)
摘要:
题目大意:给定一棵树,求移除树中哪些结点后,剩下的结点最多的连通支的结点数目不超过原树总结点的一半。分析:先用dfs将无根树转为有根树,在一棵有根树中,去掉某个结点后,剩余的分支为儿子结点所在的分支和父亲结点所在的分支,取结点数目最多的一支即可。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <vector> 4 #define N 10000 5 #define MAX(a,b) ((a)>(b)?(a):(b)) 6 using namespace std; 7 vec 阅读全文
posted @ 2012-05-02 21:24
BeatLJ
阅读(227)
评论(0)
推荐(0)
摘要:
题目链接题目大意:给定一棵树,对树中每一个结点,求其距其他结点的最远距离。分析:最初的想法是对每个结点求一次DFS,那样的话复杂度是O(N2),由于n最大可达10000,所以这个方法肯定会超时。根据树的特殊性可知,每个结点到距其最远的结点,要么通过其儿子结点到达,要么通过其父结点到达,由此想到可用树形动态规划。具体实现时,定义状态df[k],d1[k],d2[k],分别表示结点k通过父结点能到达的最远距离,通过儿子结点能到达的最远距离,通过儿子结点能到达的第二远距离。View Code 1 #include <stdio.h> 2 #include <string.h> 阅读全文
posted @ 2012-05-02 20:35
BeatLJ
阅读(272)
评论(0)
推荐(0)
摘要:
题目链接题目大意:给定一个连通无向图,每个结点有一个值,现要断开图中某条边,使得原图变成两个连通子图,且要使两个子图的值的差最小。输出最小差,若无法完成,则输出"impossible”分析:要使断开某条边后,原图变成两个连通支,则断开的边一定是桥。对图进行DFS时,得到一颗树,图中有的而树中没有的边叫回边,回边一定不是桥。由此想到可用dfs将图转化为树来做,但树中的边不一定是原图中的桥,问题关键在于桥的判断。此题还需要注意的是可能有重边。View Code 1 #include <stdio.h> 2 #include <math.h> 3 #include 阅读全文
posted @ 2012-05-02 14:59
BeatLJ
阅读(208)
评论(0)
推荐(0)