codeforce-trees
Jack_zhuiyi
这个作者很懒,什么都没留下…
展开
-
http://codeforces.com/contest/913/problem/B Christmas Spruce
判断一颗树是否为云松树,其定义为非叶子的结点至少要有3个叶节点,从根结点往下跑即可,这里我用的队列维护。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list> #include <stack> ...原创 2018-06-02 16:59:23 · 165 阅读 · 0 评论 -
http://codeforces.com/contest/580/problem/C Kefa and Park
给定一棵树,且根节点为1,树中一些结点有猫,求出所有从根节点到叶节点的路径,且路径上没有连续的m个结点上有猫,直接深搜到叶节点,记录连续的猫的个数,若大于m了则不再往下搜,否则到达叶节点,答案加1,注意读入边。 #include <iostream> #include <algorithm> #include <cstdio> #include <vec...原创 2018-06-01 17:33:01 · 146 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/115/Aparty
实际上是给你多颗树,让你用树中结点组成尽可能少的集合,其中同一颗树的结点不能放入同一个集合,思路是每次把树中每一个入度为0的结点挑出来组成一个集合,并且把这个集合中每个结点指向的结点的入度减少,然后把这个新集合中的结点从树中删除即可,按此算法做下去,直到所有树变为空树。 #include <iostream> #include <algorithm> #include...原创 2018-06-01 17:29:21 · 138 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/501/C Misha and Forest
这个题的题意是真的尬,异或值是由该结点相连结点的编号一起异或得来的。 容易想到,先处理叶节点较好,因为叶节点只能由一个父亲,其异或值就是父亲 结点的编号了,然后每次处理一个结点就把与它相连的结点的异或值,度数也跟着 一起处理一次,如果该结点成为了一个新的叶节点(事实上只是度数改变为1了)那么 就加入待处理的队列中即可。 #include <iostream> #include...原创 2018-06-06 21:07:50 · 163 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/369/C Valera and Elections
从叶节点开始修路肯定是最优的方式,这是一个很显然的结论,但要注意不要每次都去更新路径中所有结点,记录一下一个结点到根节点的路是否被修过,修过那么不必往上更新了。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list...原创 2018-06-06 21:03:49 · 169 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/696/A Lorenzo Von Matterhorn
伸展树暴力搞一下,反正只要是平衡树都能过,思路是把u到v路径上的结点加入到树中,查询直接去树里查就好了,每次更新最多120个结点而已(120是它的上界的样子没有具体去算),最多1000次查询也就是最多12000次更新。 #include <iostream> #include <algorithm> #include <cstdio> #include <...原创 2018-06-06 21:01:03 · 199 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/429/A Xor-tree
由根节点往下dfs即可,是否异或决定于祖先结点已经异或得到的值,以及当前结点初始值和要达到的目标值,祖先结点异或得到的值可以通过记录奇偶层的异或次数得到。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list>...原创 2018-06-06 20:58:00 · 148 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/639/B Bear and Forgotten Tree 3
很容易想到的一个构造法,从1开始往左建到h高,然后在h - 1的位置不断增加结点,直到剩下d - h个结点,然后放在1的右边不断往下建立,但要注意一个特殊情况,即n>2时,d=h=1时,其他的-1的情况显然时h > 2 * d的时候。 #include <iostream> #include <algorithm> #include <cstdio>...原创 2018-06-04 23:40:36 · 205 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/763/A Timofey and a tree
给定一颗树且其结点有颜色,问是否存在一个节点以它为一个割点,分割出来的其他子树颜色相同。 有一丝启发式合并的韵味。首先很容易想到枚举每一个结点去判断它是否是满足条件的一个点。 但这样判断其分割得到的子树是否颜色相同时间复杂度会为O(n^2),首先考虑枚举一个点,求得的信息 和枚举其他点的信息是否存在重复,很容易想到去考虑一个结点和其根结点所要求的信息之间的关系, 如果把结点u作为割点,则必...原创 2018-06-04 20:57:46 · 154 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/839/C Journey
dfs跑树,每次记录路径个数及到达当前结点的概率,期望值等于到达各个叶子结点的步数*概率值的和,注意n=1时的特判。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list> #include <stac...原创 2018-06-03 18:13:34 · 141 阅读 · 0 评论 -
http://codeforces.com/contest/522/problem/A Reposts
map维护名字对应的id,然后从入度为0的名字开始跑即可,实际上如果没有入度为0的id我这个应该算错误的一个程序了。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list> #include <stac...原创 2018-06-02 17:04:44 · 192 阅读 · 0 评论 -
http://codeforces.com/contest/339/problem/D Xenia and Bit Operations
先建完全二叉树得到每一层的值,每一次更新,就dfs到叶节点处再往回更新即可,注意n的取值,对于每一层是or或xor有影响。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list> #include <...原创 2018-06-02 17:03:02 · 170 阅读 · 0 评论 -
http://codeforces.com/problemset/problem/431/C
给定k-tree,且对每个结点的出边权重依次为1…k,求所有的边权重和为n的路径,且路径中有一条边权不少于d,反向dp即可。 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <list> #include <...原创 2018-06-01 18:15:28 · 155 阅读 · 0 评论