摘要: 思路跟 LA 6187 完全一样。我是乍一看没反应过来这是个并查集,知道之后就好做了。d[i]代表节点 i 到根节点的距离,即每次的sum。 1 #include 2 #include 3 #include 4 5 const int MAXN = 200010; 6 7 int N, Q; 8 int p[MAXN]; 9 int d[MAXN];10 11 int FindSet( int x )12 {13 if ( p[x] == x ) return x;14 int root = FindSet( p[x] );15 d[x] += d[ p[x]... 阅读全文
posted @ 2013-07-19 22:39 冰鸮 阅读(166) 评论(0) 推荐(0)
摘要: 一开始读漏了很多细节,用递推写死活跑不出样例。把题目中的细节列一下吧,状态方程很好推,改成记忆化搜索之后代码也很清晰。1.蜜蜂需要到最高的塔去,最高的塔可能不止一个,抵达任意一个即可。2.蜜蜂每次只能到达相邻的塔,满足的条件为横向移动距离 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 60; 9 const int INF = 1 = addr - W && j > 0; --j ) 41 { 42 res = min( res, D... 阅读全文
posted @ 2013-07-19 22:17 冰鸮 阅读(258) 评论(0) 推荐(0)
摘要: Wrong Answer思路:1.先枚举4的全排列,即球赛的所有可能结果,一共4!=24种情况2.对于每种情况,DFS 未确定的比赛 的结果,判断这种情况是否可达。剪枝:1.对于每种全排列,只需要找到一种满足这个全排列的情况即可,如果有一种情况满足,则不必再枚举其他可能。2.因为在每种情况下,球队之间的排名已经确定了,所以在DFS的过程中,凡是不满足此排名的情况统统可以剪掉。这样就可以少很多情况,即使在n=0的情况下也跑出了不错的效率,但是它Wrong Answer on test 17了。。。求指点T^T 1 #include 2 #include 3 #include 4 #... 阅读全文
posted @ 2013-07-19 01:09 冰鸮 阅读(332) 评论(0) 推荐(0)