【CF833D】Red-Black Cobweb(点分治)】的更多相关文章

[CF833D]Red-Black Cobweb(点分治) 题面 CF 有一棵树,每条边有一个颜色(黑白)和一个权值,定义一条路径是好的,当且仅当这条路径上所有边的黑白颜色个数a,b满足2min(a,b)>=max(a,b),一条路径的权值为路径上所有边的权值的乘积,求所有好的路径的权值乘积. \(n<=10^5\) 题解 首先看到求所有路径相关的内容,不难想到点分治. 两个限制可以转化为需要同时满足:\(2a\ge b,2b\ge a\). 对于两条路径\(a1,b1/a2,b2\)考虑如何…
[CF833D]Red-Black Cobweb 题面 洛谷 题解 看到这种统计路径的题目当然是淀粉质啦. 考虑转化一下信息设一条路径上有红点\(a\)个,黑点\(b\)个 则\(2min(a,b)\geq max(a,b)\) \(\Leftrightarrow 2*a\geq b\)且\(2*b\geq a\) 现在我们需要将过一个点的两条路径合并 设第一条为红\(a_1\),黑\(b_1\),第二条为红\(a_2\),黑\(b_2\) 则有 \[ 2(a_1+a_2)\geq b_1+b_…
传送门 统计所有路径的边权乘积的乘积,不难想到点分治求解. 边权颜色比例在\([\frac{1}{2},2]\)之间,等价于\(2B \geq R , 2R \geq B\)(\(R,B\)表示红色和黑色的边的条数) 所以我们可以在统计的时候,先把所有可能的路径全部乘进答案,然后除掉满足\(2B < R\)或者\(2R < B\)的路径的乘积.显然对于一条路径,这两个条件至多满足一个. 对于两条路径,它们红色.黑色的边数分别为\(B_1,R_1\)和\(B_2,R_2\),那么需要统计的就是\…
洛谷 Codeforces 思路 看到树上路径的统计,容易想到点分治. 虽然只有一个限制,但这个限制比较麻烦,我们把它拆成两个. 设黑边有\(a\)条,白边有\(b\)条,那么有 \[ 2a\geq b\\ 2b\geq a \] 合并两条边时,设原有的是\((a,b)\),要加入的是\((A,B)\),那么有 \[ 2(a+A)\geq b+B \Leftrightarrow 2A-B\geq b-2a\\ 2(b+B)\geq a+A \Leftrightarrow 2B-A\geq a-2…
D. Red-black Cobweb time limit per test:6 seconds memory limit per test:256 megabytes input:standard input output:standard output Slastyona likes to watch life of nearby grove's dwellers. This time she watches a strange red-black spider sitting at th…
题面 题解 点分治大火题... 设白边数量为$a$,黑边为$b$,则$2min(a,b)\geq max(a,b)$ 即$2a\geq b\;\&\&2b\geq a$ 考虑点分治时如何统计答案: $2(a_1 +a_2) \geq b_1 + b_2$ $\therefore 2a_1-b_1\geq b_2-2a_2$ 另外一边同理 于是我们可以愉快地用$sort+BIT$统计答案了 但是路径有可能重复计算,可以套一个$CDQ$分治什么的来搞一下 代码 #include<cstd…
题目传送门 题目大意 给出一个 \(n\) 个点的树,每条边有边权和颜色 \(0,1\) ,定义一条链合法当且仅当 \(0,1\) 颜色的边数之比小于等于 \(2\) ,求所有合法的链的边权之积的积. \(n\le 10^5\),答案对 \(10^9+7\) 取模. 思路 边分治板题,但是因为边界问题爆炸了... 首先先容斥一下,即总答案除以不合法答案,然后你发现总答案特别好求,不合法方案可是使用边分治解决. 时间复杂度 \(\Theta(n\log^2 n)\) . \(\texttt{Cod…
题目链接 线段树分治+LCT只有80 然后就有了CDQ分治的做法 把不可能在生成树里的扔到后面 把一定在生成树里的扔到并查集里存起来 分治到l=r,修改边权,跑个kruskal就行了 由于要支持撤销,并查集要按秩合并 #include"cstdio" #include"cstring" #include"iostream" #include"algorithm" using namespace std; const int M…
题目: http://acm.timus.ru/problem.aspx?space=1&num=1181 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27048#problem/A 1181. Cutting a Painted Polygon Time limit: 1.0 second Memory limit: 64 MB There is a convex polygon with vertices painted in…
思路: 点分治 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 10005 int n,k,xx,yy,first[N],next[N*2],v[N*2],w[N*2],tot; int f[N],size[N],vis[N],d[N],deep[N],root,sum,ans; void add(int x,i…