摘要:
[关键字]:LCA[题目大意]:求出一个集合点使树中三个点到这个点距离总和最小//=============================================================[分析]:无论怎么建树,这个集合点一定在这三个点两两的LCA之间,所以就转化成求LCA的问题,但这道题用离线的tarjan算法十分麻烦,所以就用的LCA转RMQ的在线算法。自我感觉代码写的相当给力:非递归+STL,可惜MLE……[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>
阅读全文
posted @ 2012-03-11 23:31
procedure2012
阅读(180)
推荐(0)
编辑
摘要:
[关键字]:并查集[题目大意]:有一本记录了n个月的账本,偷看了m次每次记住了一个区间[x,y]的和,问这本帐是否是假账。//===================================================================================[分析]:首先可以想到要判断假账必须是某个区间[l,r]出现了两个值——一个他给的值、一个依靠别的计算出的值。所以可以一个集合里面的点代表的一个连续的区间,如果两个点不在一个集合内就合并,否则判断前y个月的值-前x个月的值是否是给出的值。用g[x]记录x到他所在的集合最后一个点也就是他所在的连续区间最左边的
阅读全文
posted @ 2012-03-11 23:14
procedure2012
阅读(854)
推荐(0)
编辑
摘要:
[关键字]:动态规划[题目大意]:说也说不清楚//=====================================================================[分析]:k=1很好做就是求出最长链就行了,因为假如这条链后必定会产生环,而环上的点必定只需走一次,所以答案就是2*(n-1)-s,s就是最长链的长度。k=2时也可以求最长链,由k=1时可以看出最长链的长度就是2*(n-1)需要减掉多少,于是把第一条链所经过的边变成-1再找一遍。第二种方法是动态规划,可以求出一棵树中k条不相交的链最长总合,而这道题中任意两条相交的链(a,b)\(c,d)都可以变成(a,c)(
阅读全文
posted @ 2012-03-11 22:50
procedure2012
阅读(603)
推荐(0)
编辑