数据结构-并查集
文章平均质量分 82
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
杭电2015‘11校赛 1007油菜花王国
油菜花王国Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1609 Accepted Submission(s): 411Problem Description程序设计竞赛即将到来,作为学校ACM集训队主力,小明训练一直很努力。今天原创 2015-11-29 23:21:34 · 495 阅读 · 0 评论 -
UVA 1665 Islands
题意:输入一个n*m矩阵,每个格子都有一个正整数,再输入T个整数ti,对于每个ti,输出大于ti的正整数组成多少个四连快思路:正着做的话其实相当于删除连通块,而如果反着做的话就相当于变成增加连通块,把格子都编号然后排序,用并查集#includeusing namespace std;const int maxn = 1005;const int maxq = 1e5+1;i原创 2016-04-20 21:47:53 · 1756 阅读 · 0 评论 -
UVA 1664 Conquer a New Region
思路:有点像最小生成树那样,把边按照从大到小排序,然后并查集维护...非常巧妙的做法#includeusing namespace std;#define LL long longconst int maxn = 200000+100;int pre[maxn];int Find(int x){ return pre[x]==x?x:pre[x]=Find(pre[x])原创 2016-04-20 23:11:44 · 424 阅读 · 0 评论 -
uvalive 3644 X-Plosives(并查集)
思路:大白书上的并查集题#include#includeusing namespace std;const int maxn = 100000+10;int fa[maxn];int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}int main(){ int x,y; while(scanf("%d"原创 2016-06-05 16:57:09 · 383 阅读 · 0 评论 -
uvalive 3027 Corporative Network(并查集)
思路:大白书上的题,经典的路径压缩并且维护权值#include#include#include#includeusing namespace std;const int maxn = 20000+500;int fa[maxn],d[maxn];int find(int x){ if(x!=fa[x]) { int root = find(fa[x]原创 2016-06-05 20:25:28 · 304 阅读 · 0 评论 -
团体程序设计天梯赛L2-007 家庭房产(并查集)
思路:用并查集维护家庭的人...就是神烦...#include#include#include#includeusing namespace std;struct Node{ int id,fa,ma,k,son[6],n,area;}nodes[1005];struct Node1{ int id; int num; int sum1,sum2; do原创 2016-06-28 21:42:07 · 1479 阅读 · 1 评论 -
团体程序设计天梯赛L2-010 排座位(并查集)
思路:留意到这句话,这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。那么朋友之间的关系就可以用并查集维护,然后敌人关系可以用一个矩阵来表示就可以了#includeusing namespace std;int fa[105];int e[105][105];void init(){ for(int原创 2016-06-28 21:46:09 · 682 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1) D Dividing Kingdom II(并查集+暴力)
题意:给你一个n个点,m条边的图,q次询问,每次询问给出[L,R],用在[L,R]以内的边构成一个图,然后把这个图的点集分成两个部分,求连接同一个部分的点的最长边最小是多小思路:直接mq暴力+并查集....#includeusing namespace std;const int maxn = 1005;struct Node{ int u,v,w,id;}e[maxn原创 2016-07-01 20:26:22 · 574 阅读 · 0 评论 -
计蒜客 简单图论(并查集+枚举)
思路:注意到M才5000,所以直接枚举最小边,然后用类似并查集的方法来计算最小比值#include#include#include#include#includeusing namespace std;const int maxn = 5005;struct Edge{int u,v,w;}e[maxn];bool cmp(Edge a,Edge b){return a原创 2016-08-08 20:57:24 · 718 阅读 · 0 评论 -
HDU 5438 Ponds(并查集)
思路:不断删除度数为1的点可以类似拓扑排序那样删除,然后并查集合并的时候统计一下顶点数和权值和就可以了#includeusing namespace std;#define LL long longconst int maxn = 10000+7;vectore[maxn];int w[maxn],degree[maxn],fa[maxn],vis[maxn],cnt[max原创 2016-08-26 21:12:49 · 718 阅读 · 0 评论 -
HDU 5441 Travel(并查集)
思路:显然的mq这样的做法就T成狗...那么可以给边排个序,询问也排个序,然后扫过去,每次两个连通块合并的时候的答案就是(cnt[u]+cnt[v])*(cnt[u]+cnt[v]-1) - (cnt[u]*(cnt[u]-1))-(cnt[v]*(cnt[v]-1))嘛,然后就做完了#includeusing namespace std;const int maxn = 2000原创 2016-08-26 21:18:30 · 640 阅读 · 0 评论 -
CodeForces 622C Not Equal on a Segment(并查集)
题意:有n个数,然后m个询问,每次询问给你l,r,x,让你找到一个位置k,使得a[k]!=x,且l<=k<=r思路:并查集,我们将a[i]=a[i-1]的合并在一起#include<bits/stdc++.h>using namespace std;const int maxn = 1e6+10;int a[maxn];int pre[maxn];int Find(int x){原创 2016-04-14 22:58:22 · 672 阅读 · 0 评论 -
poj1984 Navigation Nightmare(并查集)
思路:记录两个点之间x方向和y方向的相对距离,用并查集维护。#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define m原创 2016-01-31 17:35:05 · 474 阅读 · 0 评论 -
hdu1213How Many Tables (并查集裸题)
思路:不说了..模板题#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 100000#define LL l原创 2016-01-29 21:34:16 · 407 阅读 · 0 评论 -
hdu1272小希的迷宫 (并查集应用)
题意:判断一个图是否为连通无环图思路:判断是否为连通无环图 1,无环,判断输入边的两个端点,如果它们有同一个父节点,则证明有环 2,连通,整个图只有一个集合#include #include #include #include #include #include #include #include #include #i原创 2016-01-29 22:04:01 · 263 阅读 · 0 评论 -
poj1611The Suspects(并查集)
题意:中文题..思路:简单并查集..见代码#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 30005#原创 2016-01-30 13:33:05 · 296 阅读 · 0 评论 -
poj2236Wireless Network(并查集)
题意:一张图上分布着n台坏了的电脑,并知道它们的坐标。两台修好的电脑如果距离思路:简单并查集..#include #include #include #include #include #include #include #include #include #include #include #include #include using namespac原创 2016-01-30 11:36:38 · 1578 阅读 · 2 评论 -
poj2492 A Bug's Life(并查集)
题意:有n个虫子,人们认为只有性别不同的时候才会发生性关系,现在给出m组虫子发生了关系,问是否存在同性恋(这题目...真变态)思路:并查集,将性别相同的划分在一个集合,不同的划分在另一个#include #include #include #include #include #include #include #include #include #include原创 2016-01-30 18:28:09 · 692 阅读 · 0 评论 -
hdu3038How Many Answers Are Wrong(并查集)
题意:给出一些区间[l,r]的和为S,问有多少个是矛盾的思路:对给出的区间[l,r]将左边减一变成(l-1,r]合并,把数值小的当做根节点更新即可,有一点不懂的是只会用递归来更新,用while循环一直wa...#include #include #include #include #include #include #include #include #includ原创 2016-01-31 09:50:45 · 648 阅读 · 0 评论 -
zoj3261Connections in Galaxy War(并查集)
题意:给出一些点,每个点有权值,然后有一些边,相连。无向的。然后有一些操作query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大)destory a,b 表示删除连接a,b的边思路:一开始就按题目写...写着写着发现不对劲啊..好像难搞...然后搜了一下,思路很巧妙,正难则反的思路,先把操作,图都保存下来,然后从后往前查询,根节点原创 2016-01-31 10:17:35 · 535 阅读 · 0 评论 -
poj1733 Parity game(并查集)
题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的思路:一类经典的并查集题目,经典模型就是将[l,r]这个区间化为(l-1,r],那么1的个数就可以表示为sum[r]-sum[l-1],也就确定了奇偶性,我们可以用r[]数组表示这个端点到它的根节点的1的奇偶(这个区间就是(i,root(i)](0代表偶,1代表奇) 对于每个输原创 2016-01-31 15:21:25 · 2793 阅读 · 2 评论 -
uva1329 Corporative Network(并查集:路径压缩)
题意:初始时有n个点(编号1到n),每个点都没有父节点,然后依次执行下面两条命令: I u v :把节点u的父亲设置为v,并且设u节点到v的距离为|u-v|%1000,输入保证执行I命令的时候,u没有父节点。 E u:查询u节点到根节点的距离。 输入:首先是T,表示实例个数。每个实例第一行是n(5 输出:对于每原创 2016-01-31 16:10:54 · 327 阅读 · 0 评论 -
poj1182 食物链(经典并查集)
题意:中文题思路;最详细的题解#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 50000+10#def原创 2016-01-31 17:06:16 · 324 阅读 · 0 评论 -
哈理工第六届程序设计大赛 D 经商 (并查集+背包)
思路:题目还是比较裸的。。并茶几+01背包搞搞就可以了#includeusing namespace std;const int maxn = 10000+7;#define LL long longint fa[maxn];void init(int n){ for(int i = 0;i<=n;i++)fa[i]=i;}int Find(int x){return原创 2016-11-20 21:09:37 · 479 阅读 · 0 评论