
dfs
acblacktea
永不放弃
展开
-
Codeforces Round #359 (Div. 2) D. Kay and Snowflake
重心的定义是:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。1.树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。2.把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。3.把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。一棵树的重心是它的子树的重心和这棵树的祖宗节点连的几条线原创 2016-07-16 22:49:10 · 445 阅读 · 0 评论 -
codeforces 362 div2D Puzzles
求i点的遍历位置的概率公式 因为 从祖先到i点的一条线上的所有点都要遍历,其余途中经过的各个点的分枝(除了这条直线)都有两种选择可选可不选 所以概率公式为 deepi+sum[i]/2.0(这个点以上的除了祖先到这个点的线分支上点的数量)#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#incl原创 2016-07-16 22:29:51 · 359 阅读 · 0 评论 -
2016 多校 hdu 5723
首先最小生成树,然后dfs统计每条边经过了几棵子树 每条边经过的子树个数等于这条边连接的子树节点数*(n-子树节点数)因为这是一棵树每条边都能把树分成两个集合,假设第一个集合的元素数目为n1,第二个集合的元素数目为n2,那么从两个集合分别选出一点就有n1*n2种方案#include<vector>#include<algorithm>#include<iostream>#include<cst原创 2016-07-20 22:18:43 · 486 阅读 · 0 评论 -
Codeforces Round #363 (Div. 2) D. Fix a Tree
1.去环, 2.合并成一棵树。 第二步简单,第一步本题如果有环必然经过根,因此把根指向总树的跟#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<vector>#include<s原创 2016-07-20 22:33:11 · 285 阅读 · 0 评论 -
hdu 5113 Black And White dfs剪枝
这个。。。减枝方案看了题解才发现是自己思维太僵。。。 如果剩下的某种颜色大于剩下的格子数量的1/2那必有两个格子颜色相同然后return 鸽巢原理#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int am[50],n,m,k,ans[10][10],f原创 2016-08-07 22:41:14 · 456 阅读 · 8 评论 -
codeforces 711D Directed Roads dfs
首先给的每个点只有一个出度既不可能有大于一个出度 每条边可以改变方向 所以每个点最多只能在一个环上,且所有有向环的信息已经给出因为每个点只有一个出度 dfs把每个环都求出来 ans *( 2^n(环的边数) - 2) 最后ans * 2^m(链的边数)#include<cstdio>#include<algorithm>#include<iostream>#include<map>#原创 2016-09-06 12:46:58 · 357 阅读 · 0 评论