
并查集
Giggle1929
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第十三天PAT-A1114 Family Property并查集详细注解
A1114 Descripiton: 家族产权,给出N个人的家族关系即其所拥有的房产数和总面积,求这一系列人属于几个家族,并求其家族人均房产数和人均面积。 思路: 由于输入当前人的时候,其孩子的房产数和面积还没输入,所以第一遍输入没法计算房产总数和面积总数,于是我在第一遍输入的时候直接不做集合求并了,而是将所有与当前人为一家人(包括父母节点)的下标存储在结构体vector<int>child中,当所有人的房产数和总面积都输入完毕后,再从头到尾遍历每个人、取出要合并为一家人的下标进行合并; id原创 2020-08-27 22:36:33 · 211 阅读 · 0 评论 -
第八天PAT-A1107 Social Clusters并查集背诵模板解析
A1107 Description: 具有相同爱好的人城市为社交圈,你的任务是找出所有的社交圈。 Input: 每个测试一组样例; 首行给出一个正整数N<=1000,表述社交网络中的总人数,人们被编号为1-N 接下来N行,每行给出对应人的爱好,爱好总数取值范围[1,1000] Output: 首行输出社交圈的个数; 第二行,以递减序列输出每个社交圈中的人数 算法描述: 拥有共同爱好的人为同一圈子,并查集 并查集算法的模板如下: int fa[maxn]; void init(){原创 2020-08-22 15:15:46 · 171 阅读 · 0 评论 -
第五天PAT-A1034 Head of a Gang并查集解法详细算法描述及代码解析
A1034 Description: 警方找犯罪团伙的头目的方式之一是检查人们的通话记录。如果AB之间有通话,则认为AB是相关的。关系的强度定义为两人通话的总时长。若一群人中存在两个人的的关系强度大于阈值K,则认为是一个团伙。对于每个团伙,总关系强度最大的人是头目。现在给出一组通话记录,找出这个团伙及其头目。 算法描述: 关于团伙人数,使用并查集,设置一个团伙人数记录数组(代码中为cnt); 对于每条通话记录,为两者累加记录通话时间,为两者合并后得到的团伙增加总通话时长; 通话时间最长的人是团伙中的头目;原创 2020-08-19 18:59:53 · 318 阅读 · 1 评论 -
第四天PAT-A1021 Deepest Root(难)详细代码注解
A1021 Description: 给出一个图,求可以得到最大深度树的根节点。 详细推导证明过程见“《算法笔记上级实战训练》P344,证明过程如下“,实际遇到这样难以证明正确性的题,还是很难受的,不专注导致一道题写了两个多小时没写出来,反思一下,明天加油。 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #inc原创 2020-08-18 23:57:55 · 195 阅读 · 0 评论 -
计蒜客-网络交友-并查集
题目链接 用了一个映射表维护人员序号 AC代码 #include<bits/stdc++.h> using namespace std; const int maxn = 10005; int p, n, fa[maxn], size[maxn]; map<string, int>amap; int num(string nam){ if(amap.count(nam...原创 2019-07-15 11:23:50 · 256 阅读 · 0 评论 -
计蒜客-修建大桥-并查集做法-图的连通性
题目链接 又是等前女友回消息的一天 大概是要用最少的边构建一个无向连通图吧 想了一下用并查集 竟然过了,AC如下 #include<bits/stdc++.h> using namespace std; int cnt, n, m; int fa[1005], size[1005]; void init() { cnt = n - 1; for(int i = 0; i <...原创 2019-07-10 17:23:59 · 143 阅读 · 0 评论 -
计蒜客-穿越雷区-Kruscal最小生成树
题目链接 水题做多了有害身体健康? AC代码 #include<bits/stdc++.h> using namespace std; const int maxn = 30005; const int maxm = 50005; int n, m, fa[maxn], ans, cnt; struct edge{ int u, v, w; edge(int uu, int v...原创 2019-07-12 22:55:07 · 147 阅读 · 0 评论 -
计蒜客-连线问题-Krucal-并查集
题目链接 无坑,AC代码 #include<bits/stdc++.h> using namespace std; const int maxn = 105; const int inf = 0x3f3f3f3f; struct point{ int x, y; point(){ } point(int xx, int yy){ x = xx; y = yy; } ...原创 2019-07-12 22:23:45 · 143 阅读 · 0 评论 -
JSK-布设光钎-Kruscal最小生成树-并查集-图的连通性
题目链接 (舍友走了四个,还剩我和老王) 水题,AC如下 #include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 105; int n, ans, fa[maxn], cnt; struct edge{ int u, v, w; edge(int _u,...原创 2019-07-12 21:51:58 · 126 阅读 · 0 评论 -
JSK-并查集-找朋友
题目链接 简单的并查集应用,路径压缩代码: int get(int x){ if(x == father[x]; return x; return father[x] = get(father[x]); } AC警告 #include<bits/stdc++.h> using namespace std; int fa[5005]; int get(int x) { ...原创 2019-05-14 11:15:27 · 397 阅读 · 0 评论