C. K-Complete Word(小小的并查集啦~)】的更多相关文章

永久打开的传送门 \(\color{Pink}{-------------分割-------------}\) \(n最大有2e5,那么暴力一定不行,找规律\) \(我们发现第i位的字符一定和第i+k位相等(周期)\) \(第i位的字符一定和第n-i+1位字符相等(回文)\) \(那么每次把i,i+k,n-i+1合并到一个集合(并查集)\) \(最后一定是分成了若干个集合,集合中的元素要相等\) \(那我们再统计每个集合的元素个数和集合里出现字符最多的字母\) \(于是我们规定这个集合都变成出现…
1456 小K的技术 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   苏塞克王国是世界上创新技术的领先国家,在王国中有n个城市,标记为1到n. 由于小K的研究,我们最终能过在两个城市之间建立传输管道,一个传输管道能单向连接两个城市,即,一个从城市x到城市y的传输管道不能被用于从城市y传输到城市x.在每个城市之间的运输系统已经建立完善,因此,如果从城市x到城市y的管道和从城市y到城市z的管道都被已经被建立,人们能够立即从x到…
相关介绍:  并查集的相关算法,是我见过的,最为之有趣的算法之一.并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.其相关的实现代码较为简短,实现思想也简单易懂,处理问题的效率也高,解决的问题范围也较广.  为了实现并查集的相关算法,我们规定将对象称之为触点,将整数对称之为连接,将两两之间彼此互不相连的各个集合的分布(也就是其相关的等价类)称之为连通分量,也称为分量.同时定义了如下的API用来封装其所需的基本操作: public class UF…
原题链接:K-Link-Cut Tree_第46屆ICPC 東亞洲區域賽(澳門)(正式賽) (nowcoder.com) 题意: 要求一个边权值总和最小的环,并从小到大输出边权值(2的次幂):若不存在环,输出-1. 思路: 考虑按权值从小到大加边,当出现环时(利用并查集判环),这个环必定是总权值最小的环. 找到环后,不再加边,并从环上某一点做DFS,找到从该点出发并再次回到该点的环. 代码: #include <bits/stdc++.h> #define PII pair<int,in…
题目链接: http://poj.org/problem?id=2492 题意: 有t组测试数据, 对于每组数据,第一行n, m分别表示昆虫的数目和接下来m行x, y, x, y表示教授判断x, y为异性, 问教授是否有错误判断,即存在x, y为同性; 这道题和poj1703类似, 不过更简单一点 (poj1703题解) 解法1: 我们可以用rank[x]记录x与其父亲节点的关系, rank[x]=0表同性, rank[x]=1表异性; 假设前面的教授判断都是正确的, 若后面存在与前面判断矛盾的…
C. Not Equal on a Segment 题目连接: http://www.codeforces.com/contest/622/problem/C Description You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi. For the i-th query find any position pi (li ≤ pi …
POJ1182 HDU3038 这两个题比较像(一类题目),属于带权(种类)并查集 poj1182描绘得三种动物种类的关系,按照他一开始给你的关系,优化你的种类关系网络,最后看看再优化的过程中有几处矛盾 #include <iostream> #include <string.h> #include <cstdio> using namespace std; const int maxn = 5e4 + 5e2; int pre[maxn],rel[maxn]; int…
题目描述 给定一个 $n\times m$ 的方格图,每个格子有 ↑.↓.←.→,表示从该格子能够走到相邻的哪个格子.有一些格子是空着的,需要填上四者之一,需要满足:最终的方格图中,从任意一个位置出发都能够走出方格图.求方案数 mod 10^9+7. $数据组数\le 10$ ,$n,m\le 300$ ,$空格子数k\le 200$ 题解 并查集+矩阵树定理 由于k很小,又是计数问题,考虑矩阵树定理. 先使用并查集处理出从每个位置开始,最终会走到哪个位置.显然如果有环则答案为0,否则一定走到的…
题目链接  2016 CCPC东北地区大学生程序设计竞赛 B题 题意  给定一个无向图和一棵树,树上的每个结点对应无向图中的一条边,现在给出$q$个询问, 每次选定树中的一个点集,然后真正被选上的是这些点以及这些点的所有祖先. 只有标号在树中真正被选上的点代表的这些原图中的边是存在的,这样就构成了一个新的图.求这个图的连通块个数. dfs整棵树,记$f[x]$为若$x$以及$x$的所有祖先被选上,那么构成的新的图的并查集) 这个实现比较简单,搜索的时候打上标记,回来的时候撤销即可. 这样预处理的…
题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的边,并查集维护连通性,求集合元素内总数即可 #include <bits/stdc++.h> #define N 200100 #define inf 0x3f3f3f3f using namespace std; int n,q,cnt; int fa[N],f[N]; struct EDGE{…