并查集
卡常带师
这个作者很懒,什么都没留下…
展开
-
CodeForces 1423H Virus
题目链接:https://codeforces.com/problemset/problem/1423/H 这个题目,显而易见的需要可撤销并查集,然后发现,每条边有一个存在时间,我们只需要处理出这个存在时间,那么这个题目就可以使用线段树分治+可撤销并查集来维护。当然这个地方的时间与操作数量对等,而不是天数,如果是天数的话,处理询问会存在很大的麻烦,读者可以自己思考一下,但是如果这里以操作顺序为时间轴,那么就会简单很多,不会存在加边和查询的先后问题 //#define LOCAL #include <.原创 2020-11-11 23:40:04 · 178 阅读 · 0 评论 -
CF1444C Team-Building 可撤销种类并查集
思路: 该题很容易想到,暴力枚举子图,然后二分图判定,统计答案即可,但是复杂度太高。 正难则反,我们考虑用所有方案减去不合法方案。 不和法方案分为两种: - 如果一个环为奇环,并且只有一种颜色,那么所有和他构成的偏序集都是不合法的 - 如果一个环奇幻,并且环内由两种颜色构成,那么由这两种颜色构成的偏序集是不合法的 对于第一种情况,利用并查集可以很快的判断出来。 第二种情况只需要先将图进行一些处理,先将所有相同颜色的边利用并查集构成连通块,这个时候利用的是连接相同颜色的边。然后再将连接不同颜色的边分组。.原创 2020-11-02 16:41:27 · 600 阅读 · 0 评论 -
P5787 线段树分治+可撤销并查集
题目链接:https://www.luogu.com.cn/problem/P5787 解题技巧: 1.对于此类在某一段时间**[L,R]**内产生贡献的非强制在线问题,我们都可以试着采用线段树分治解决 //#define LOCAL #include <bits/stdc++.h> using namespace std; #define ll long long #define mem(a, b) memset(a,b,sizeof(a)) #define sz(a) (int)a.s.原创 2020-10-23 21:05:48 · 164 阅读 · 0 评论 -
可撤销并查集+MST思想-Codeforces891C
可撤销并查集,采用启发式按秩合并 struct Undo_Dsu { stack <pii> st ; int fa[N] , siz[N] ; void init() { while(!st.empty()) st.pop() ; for (int i = 1 ; i <= n ; i ++) fa[i] = i , siz[i] = 1 ; } int findroot(int x) { .原创 2020-10-15 22:54:20 · 3509 阅读 · 0 评论 -
HDU - 1856 并查集,寻找最大集合元素个数
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int fa[10000000]; int mark[10000000]; int findroot(int x) { if(fa[x] == x) return x; el...原创 2018-09-26 17:31:48 · 252 阅读 · 0 评论 -
小希的迷宫 HDU - 1272(并查集判断是否成环)
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int fa[100005],vis[100005],flag;//flag判断是否成环 int n , m; int findroot(int x) { if(fa[x] == x) ...原创 2018-09-22 15:59:50 · 162 阅读 · 0 评论