摘要: 两次DFS求树直径方法见 这里。这里的直径是指最长链包含的节点个数,而上一题是指最长链的路径权值之和,注意区分。K R: ans = R − 1 + ( K − R ) ∗ 2; 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 100010; 9 10 struct node 11 { 12 int v; 13 int next; 14 }; 15 16 int N, Q, EdgeN; 17 int head... 阅读全文
posted @ 2013-07-27 23:25 冰鸮 阅读(299) 评论(0) 推荐(0)
摘要: 一个比较经典的题型,两次DFS求树上每个点的最远端距离。参考这里:http://hi.baidu.com/oi_pkqs90/item/914e951c41e7d0ccbf904252dp[i][0]表示最远端在以 i 为根的子树中的最长长度,dp[i][1]记录最远端在以i为根的子树中的次长长度,dp[i][2]表示最远端不在以 i 为根的子树中的最长长度。答案即为max( dp[i][0], dp[i][2] );dp[i][0]和dp[i][1]可以通过一次DFS得到。再看dp[i][2], 设fa[i]为节点 i 的父节点: dp[i][2] = max( dp[ fa[i] ][2] 阅读全文
posted @ 2013-07-27 21:51 冰鸮 阅读(342) 评论(0) 推荐(0)
摘要: 扩展欧几里得的应用……见算法竞赛入门经典p.179注意两点:1.解不等式的时候除负数变号2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 && b=0 && c!=0 ) ( a=0 && b!=0 )( a!=0 && b=0 )能加深对扩展欧几里得的理解,不错的一题 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 #define LL long long int 8 9 using namespac 阅读全文
posted @ 2013-07-27 11:54 冰鸮 阅读(229) 评论(0) 推荐(0)