HackerRank "Kundu and Tree" !!】的更多相关文章

Learnt from here: http://www.cnblogs.com/lautsie/p/3798165.html Idea is: we union all pure black edges so we get 1+ pure black edge groups. Then we can simply pick only 1 vertex from each pure-black group to form a triangle. Then it will be all combi…
Something to learn: Rotation ops in AVL tree does not require recursion. https://github.com/andreimaximov/hacker-rank/blob/master/data-structures/tree/self-balancing-tree/main.cpp node *create_node(int val) { node *pNew = new node; pNew->val = val; p…
https://www.hackerrank.com/contests/w2/challenges/cut-the-tree 树分成两部分,求两部分差最小.一开始想多了,后来其实求一下总和,求一下分部的和就行了. #include <cstdlib> #include <climits> #include <algorithm> #include <iostream> #include <vector> using namespace std;…
The Utopian tree goes through 2 cycles of growth every year. The first growth cycle of the tree occurs during the monsoon, when it doubles in height. The second growth cycle of the tree occurs during the summer, when its height increases by 1 meter.…
树包含N个点和N-1条边.树的边有2中颜色红色('r')和黑色('b').给出这N-1条边的颜色,求有多少节点的三元组(a,b,c)满足:节点a到节点b.节点b到节点c.节点c到节点a的路径上,每条路径都至少有一条边是红色的. 注意(a,b,c), (b,a,c)以及所有其他排列被认为是相同的三元组.输出结果对1000000007取余的结果.     Input 第1行:1个数N(1 <= N <= 50000) 第2 - N行:每行2个数加一个颜色,表示边的起始点和结束的以及颜色. Outp…
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 全为红边的情况下,ans=C(n,3).假设被黑边相连的点形成一个特殊的连通块,在一个大小为x的连通块形成的过程中,ans减去cal(x)=C(x,3)+(n-x)*C(x,2) 代码如下 #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ; int fa[N];…
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1253.html 题目传送门 - 51Nod1253 题意 树包含 N 个点和 N-1 条边.树的边有 2 中颜色红色 ('r') 和黑色 ('b') .给出这 N-1 条边的颜色,求有多少节点的三元组 (a,b,c) 满足:节点 a 到节点 b .节点 b 到节点 c .节点 c 到节点 a 的路径上,每条路径都至少有一条边是红色的.注意 (a,b,c) , (b,a,c) 以及所有其他排列被认为…
[传送门:51nod-1253] 简要题意: 给出一棵n个点的树,树上的边要么为黑,要么为红 求出所有的三元组(a,b,c)的数量,满足a到b,b到c,c到a三条路径上分别有至少一条红边 题解: 显然黑边是没用的,那么我们将只有黑边相连的点分成若干的连通块 那么答案就很显然了,容斥一手 就是(所有三元组的数量)-(三个点都在一个连通块的数量)-(两个点在一个连通块,另一个不在的数量) 参考代码: #include<cstdio> #include<cstring> #include…
点此看题面 大致题意: 给你一棵树,每条边为黑色或红色, 求有多少个三元组\((x,y,z)\),使得路径\((x,y),(x,z),(y,z)\)上都存在至少一条红色边. 容斥 我们可以借助容斥思想,用总方案数减去不合法方案数,就可以得到合法方案数. 一个不合法方案,就要使得路径\((x,y),(x,z),(y,z)\)中,至少存在一条路径是全黑的. 如果我们删去树上的红色边,只留下黑色的边.则可以发现,一个不合法方案,满足至少存在两个点在同一个连通块内. 计算答案 考虑用并查集,统计每一个连…
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 所有的三元组的可能情况数有ans0=C(n,3).然后减去不符合条件的情况数. 假设被黑边相连的点形成一个特殊的连通块,在一个大小为x的连通块形成的过程中,ans减去cal(x)=C(x,3)+(n-x)*C(x,2) 代码如下 #include<bits/stdc++.h> using namespace std; typedef long lon…