ural1671 Anansi's Cobweb】的更多相关文章

Anansi's Cobweb Time limit: 1.0 secondMemory limit: 64 MB Usatiy-Polosatiy XIII decided to destroy Anansi's home — his cobweb. The cobweb consists of Nnodes, some of which are connected by threads. Let us say that two nodes belong to the same piece i…
题意:给一个无向图.每次查询破坏一条边,每次输出查询后连通图的个数. 思路:并查集.逆向思维,删边变成加边. #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<iostream> #define inf -100000000 #define LL long long #define maxn 100005 using namespace…
1671 并查集 对于询问删除边之后的连通块 可以倒着加边 最后再倒序输出 #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; #define N 100010 int p[N],father[N],a,b,f[N]; int pp[N]; struct node { i…
这道题是并差集的简单应用 #include <cstdio> #include <cstring> #include <algorithm> #define maxn 100010 using namespace std; int x[maxn],y[maxn],flag[maxn],f[maxn],t[maxn]; bool vis[maxn]; inline int find(int x) { if(x==f[x]) return x; return f[x]=fi…
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…
[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…
题面 题解 点分治大火题... 设白边数量为$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…