Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7515    Accepted Submission(s): 2368 Problem Description Recognizing junk mails is a tough task. The method used here consists o…
http://acm.hdu.edu.cn/showproblem.php?pid=2473 给定两种操作 第一种是合并X Y 第二种是把X分离出来,就是从原来的集合中分离出来,其它的关系不变. 关键是怎么分离,可以考虑把它变成一个其它值.HASH[i] = other_val 然后用新值去做并查集即可. 需要注意的一点就是 假如现在根是1,fa[1] = 1, fa[2] = 1, fa[3] = 1 那么如果你删除了1,这应该输出2.但是现在是fa[2] = 1,是一个不存在的根了,这个时候…
合纵连横 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法吞并那些实力弱的,让自己的领土面积不断扩大.而实力弱的诸侯王为了不让自己的领土被吞并,他会联合一些其他同样弱小的诸侯国,组成联盟(联盟不止一个),来共同抵抗那些强大的诸侯国. 强大的诸侯国为了瓦解这些联盟,派出了最优秀的间谍来离间他们,使一些诸侯国退出联盟.最开始,每个诸侯国是一个联盟. 有两种操作…
Description Recognizing junk mails is a tough task. The method used here consists of two steps:  1) Extract the common characteristics from the incoming email.  2) Use a filter matching the set of common characteristics extracted to determine whether…
Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6276    Accepted Submission(s): 1981 Problem Description Recognizing junk mails is a tough task. The method used here consists o…
题目地址:pid=2473">HDU 2473 这题曾经碰到过,没做出来. .如今又做了做,还是没做出来. ... 这题涉及到并查集的删除操作.想到了设一个虚节点,可是我把虚节点设为了要删除的点的父节点.一直是栈溢出,目測是无限递归了. 看了看别人的做法. 原来仅仅要建一个映射就能够了,虚节点是作为的新的映射,每次删除一个点,就把他映射到一个新的点上去. 代码例如以下: #include <iostream> #include <cstdio> #include &…
http://acm.hdu.edu.cn/showproblem.php?pid=2473 http://acm.fzu.edu.cn/problem.php?pid=2155 题目大意: 编号0~n-1的电子邮件,让你进行归类. M X Y表示x y是同一类的,而S X则取消之前X的分类.问你经过M次这样的操作后,有多少类相同的邮件. 思路: 下午FZU月赛有这题.不过我没参加- -||||,先暂时退出ACM一段时间.事情多.得先去搞定那个外包的软件了 并查集的应用.多开了一个数组real,…
题意:有N封邮件, 然后又两种操作,如果是M X Y , 表示X和Y是相同的邮件.如果是S X,那么表示对X的判断是错误的,X是不属于X当前所在的那个集合,要把X分离出来,让X变成单独的一个.最后问集合的个数. 方法一:设立虚父节点 思路:n~n+n-1作为一开始初始化的根节点,而0~n-1作为虚拟根节点(即初试时它们指向n~n+n-1),之后删除节点操作时用n+n-1~n+n+m作为备用节点. 删除时直接修改0~n-1指向的节点(即0~n-1的父亲的值)变为备用节点 设cnt为备用节点,假如一…
题目大意:输入两个整数n,m(n表示点的个数,m表示操作数).在接下来的m行中,对点的操作有两种 1)M a b . 表示将a.b并到一个集合中 2)S a .表示将a从原来的集合中去除,而成为一个单独的集合 解题思路:并查集 1) 解题思路:并查集,M代表合并,S代表删除,下面讲一下删除操作 大家都知道合并操作就是找到找到两个节点的父亲,修改父亲,如果删除就是将该点的父亲重新设置成自己,这样行不行呢? 这是不行的,比如1,2,3的父亲都是1,现在删除1,1的父亲还是1,2,3也是1,集合还是1…
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2915    Accepted Submission(s): 931 Problem Description Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to…
Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4384    Accepted Submission(s): 1673 Problem Description Five hundred years later, the number of dragon balls will increase unexpecte…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点:将该问题转换为图论问题即为判断该图是否为一个连通图且不为二分图: (1)二分图的性质:对于无向图G=(V, E),如果可以将图中的点划分为两个不相交的点集X与Y = V - X(V为点集),使得图中所有的边邻接的两个点分别存在集合X与集合Y中,则称该图G为二分图: (2) 二分图判定算法:二分图一种判定方法是给图中的每一…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 思路分析:该问题给定一个无向图,要求判断该无向图是否存在欧拉回路:无向图判断存在欧拉回路的两个必要条件:该无向图为连通图且所有的结点的度数为偶数: 代码如下: #include <cstdio> #include <cstring> #include <iostream> using namespace std; + ; int fa[MAX_N]; int link…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU2473 题意概括 一堆点. 要你支持合并两组点.分离某组点中的一个,这两种操作. 点数<=100000,操作数<=1000000 题解 删除点不难,只需要把之前那个点不删除,然后再建立一个新的点就可以了.具体直接看代码应该就懂了. 代码 #include <cstring> #include <cstdio> #include <algorithm> #incl…
传送门 题意: 每次合并两份邮件,或者将某一份邮件独立出来,问最后有多少个邮件集合. 分析: 考虑初始化每个节点的祖先为一个虚父节点(i + n),虚父节点指向它自己.这样可以进行正常的合并操作. 而在删除时,将该节点的祖先置为一个更大的数(++anc_cnt),并让该anc_cnt指向它自己,这样不会影响与自身节点相连的所有关系.最后统计有多少个不同的祖先即可. code #include<bits/stdc++.h> using namespace std; const int N = 1…
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基础并查集★1325&&poj1308 Is It A Tree? 基础并查集★1856 More is better 基础并查集★1102 Constructing Roads 基础最小生成树★1232 畅通工程 基础并查集★2120 Ice_cream's world I 基础并查集★212…
3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status][Discuss] Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2*10^4 Input Output Sample Input 5 6…
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5253  Solved: 2395[Submit][Status][Discuss] Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或间接地连接. 但好景不长,很快帝国又重…
题目传送门 题意:训练指南P246 分析:主要是第二种操作难办,并查集如何支持删除操作?很巧妙的方法:将并查集树上p的影响消除,即在祖先上(sz--, sum -= p),然后为p换上马甲:id[p] = ++pos(可多次),这样id[p]就相当于是新的一个点,那么在Find(x)寻找祖先时要用x的马甲来寻找,即Find (id[x]). #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; int rt[N…
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…
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\leq 200000\) 题解 我们可以用并查集维护连通块个数,可惜并查集不支持删除操作. 但是这道题没有强制在线,所以可以先删完所有点后再一个个加回来. 加边的时候维护连通块个数. 时间复杂度:\(O(n\alpha(n))\) 代码 #include<cstdio> #include<cst…
F. Asya And Kittens time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn and then put them into…
题目描述-->p2700 逐个击破 题意概括 花费最小的代价,使得一些有标记的节点不连通. 分析 我们需要花费最小代价使得原来连通的图中一些节点之间不相互连通. 贪心显然是可行的(一点也不显然 看到其他人写了dp,写了贪心. 但我感觉可以排序+并查集做啊. 排序 考虑我们要花费最小代价删边,但是并查集不支持删除操作. (貌似有一种东西叫分治线段树可以维护这种操作. 因此,我们根据容斥原理(这玩意是叫容斥吧. 花费最小代价删边,等价于花最大代价建边,最后剩下不建的边,就是我们的答案. 所以说,我们…
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号,一开始0号位置空,其它的位置i上有编号为i的盒子.Lostmonkey要按照以下规则重新排列这些盒子. 规则由5个数描述,q,p,m,d,s,s表示空位的最终位置.首先生成一个序列c,c0=0,ci+1=(ci*q+p) mod m.接下来从第一个盒子开始依次生成每个盒子的最…
ShangHai2006 Homework Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 918  Solved: 460[Submit][Status][Discuss] Description   1:在人物集合 S 中加入一个新的程序员,其代号为 X,保证 X 在当前集合中不存在.    2:在当前的人物集合中询问程序员的mod Y 最小的值. (为什么统计这个?因为拯救 过世界的人太多了,只能取模)    Input 第一行为用空格隔开的…
概念 并查集是一种树形的数据结构,用来处理一些不交集的合并及查询问题.主要有两个操作: find:确定元素属于哪一个子集. union:将两个子集合并成同一个集合. 所以并查集能够解决网络中节点的连通性问题. 基本实现 package com.yunche.datastructure; /** * @ClassName: UF * @Description: 并查集 * @author: yunche * @date: 2018/12/30 */ public class UF { /** *…
题目链接 https://www.luogu.org/problemnew/show/UVA11987 分析 分析下操作发现就是加了个删除操作的并查集,怎么做删除操作呢. 我们用一个\(id[]\)记录每个数字在并查集中的编号,\(tot=n\),一开始\(id[i]=i\),当将\(p\)从原集合中删除时,让原来的\(id[p]\)变成一个虚点,\(id[p]=++tot\),这样就完成了删除操作,当然我们查找祖先时需要\(find(id[x])\) 推荐博客:https://blog.csd…
1. POJ 2236 给出N个点,一开始图是空白的,两个操作,一个是增加一个点(给出坐标),一个是查询两个点间是否相通,当两点间的距离小于D或者两点通过其他点间接相连时说这两个点相通.并查集维护,每次增加一个点加入到vector中并于之前的点比较,距离小于D则合并到一个集合即可. #include <iostream> #include <string.h> #include <cstdio> #include <vector> #include <…
Problem Description Recognizing junk mails is a tough task. The method used here consists of two steps:1) Extract the common characteristics from the incoming email.2) Use a filter matching the set of common characteristics extracted to determine whe…
Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8640    Accepted Submission(s): 2735 Problem Description Recognizing junk mails is a tough task. The method used here consists…