给出n和k
接下来n行,每行给出a,b,c,表示a和b之间的关系度,表明他们属于同一个帮派
一个帮派由>2个人组成,且总关系度必须大于k。
帮派的头目为帮派里关系度最高的人。
(注意,这里关系度是看帮派里边的和,而不是帮派里所有个人的总和。
如果是按个人算的话,相当于一条边加了两次,所以应该是>2*k)
问你有多少个合格帮派,以及每个帮派里最大的头目是谁,按字典序输出

先并查集一下,然后统计每个帮的成员数、总关系度、以及头目

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <map> using namespace std;
const int maxn=(+)*;
map<string,int> maps;
string id_name[maxn];
int rel[maxn]; //每个人的weight
int vis[maxn];
struct Gang{
string name;
int num;
int tot=;
int maxweight=;
bool operator<(const Gang tmp)const{
if(name.compare(tmp.name)<=)
return true;
else
return false;
}
}gang[maxn];
//并查集
struct UF{
int fa[maxn];
int num[maxn];
void init(){
for(int i=;i<maxn;i++){
fa[i]=i;
num[i]=;
}
}
int find_root(int u){
if(fa[u]!=u)
fa[u]=find_root(fa[u]);
return fa[u];
}
void Union(int x,int y){
int fx=find_root(x);
int fy=find_root(y);
if(fx!=fy){
fa[fy]=fx;
num[fx]+=num[fy];
}
}
}uf; int main()
{
char str1[],str2[];
int a;
int cnt=;
int n,k;
uf.init();
memset(rel,,sizeof(rel));
scanf("%d %d",&n,&k);
for(int i=;i<n;i++){
cin>>str1>>str2;
scanf("%d",&a);
if(maps[str1]==){
maps[str1]=++cnt;
id_name[cnt]=str1;
}
if(maps[str2]==){
maps[str2]=++cnt;
id_name[cnt]=str2;
}
rel[maps[str1]]+=a;
rel[maps[str2]]+=a;
uf.Union(maps[str1],maps[str2]);
}
memset(vis,,sizeof(vis));
int gangcnt=;
//父亲一样的属于同一个组,建立父亲id与帮派之间的映射
for(int i=;i<=cnt;i++){
int group=uf.find_root(i);
if(!vis[group]){
vis[group]=++gangcnt;
gang[gangcnt].num=uf.num[group];
gang[gangcnt].tot+=rel[i];
gang[gangcnt].maxweight=rel[i];
gang[gangcnt].name=id_name[i];
}
else{
int id=vis[group];
gang[id].tot+=rel[i];
if(rel[i]>gang[id].maxweight){
gang[id].name=id_name[i];
gang[id].maxweight=rel[i];
}
}
}
sort(gang+,gang+gangcnt+);
int ans=;
for(int i=;i<=gangcnt;i++){
//tot要除以2,因为一条边的weight加了2次
if(gang[i].num>&&gang[i].tot/>k){ ans++;
}
}
printf("%d\n",ans);
for(int i=;i<=gangcnt;i++){
if(gang[i].num>&&gang[i].tot/>k){
cout<<gang[i].name<<" "<<gang[i].num<<endl;
}
}
return ;
}

PAT甲题题解-1034. Head of a Gang (30)-并查集的更多相关文章

  1. PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  2. PAT甲题题解-1053. Path of Equal Weight (30)-dfs

    由于最后输出的路径排序是降序输出,相当于dfs的时候应该先遍历w最大的子节点. 链式前向星的遍历是从最后add的子节点开始,最后添加的应该是w最大的子节点, 因此建树的时候先对child按w从小到大排 ...

  3. PAT甲题题解-1064. Complete Binary Search Tree (30)-中序和层次遍历,水

    由于是满二叉树,用数组既可以表示父节点是i,则左孩子是2*i,右孩子是2*i+1另外根据二分搜索树的性质,中序遍历恰好是从小到大排序因此先中序遍历填充节点对应的值,然后再层次遍历输出即可. 又是一道遍 ...

  4. PAT甲题题解-1127. ZigZagging on a Tree (30)-中序、后序建树

    根据中序遍历和前序遍历确定一棵二叉树,然后按“层次遍历”序列输出.输出规则:除根节点外,接下来每层的节点输出顺序是:先从左到右,再从右到左,交替输出 #include <iostream> ...

  5. PAT甲题题解-1068. Find More Coins (30)-dp,01背包

    一开始没多想,虽然注意到数据N<=10^4的范围,想PAT的应该不会超时吧,就理所当然地用dfs做了,结果最后一组真的超时了.剪枝啥的还是过不了,就意识到肯定不是用dfs做了.直到看到别人说用0 ...

  6. PAT甲题题解-1008. Elevator (20)-大么个大水题,这也太小瞧我们做题者的智商了

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <cstr ...

  7. PAT甲题题解-1010. Radix (25)-二分搜索

    题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...

  8. PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。

    题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...

  9. PAT甲题题解-1012. The Best Rank (25)-排序水题

    排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...

随机推荐

  1. python基础之单例设计模式

    class Player(): instance = None init_flag = False def __init__(self): if self.init_flag is False: pr ...

  2. Arthas开源项目

    本文主要围绕着Arthas是什么.能做什么.安装和使用等三个方面内容来讲解,希望对初学者和对此有兴趣的朋友有帮助. 一. Arthas是什么 文档地址: https://alibaba.github. ...

  3. Zookeeper入门(二)之基础

    在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.本文主要包含如下内容:1.Architecture(架构)2.Hierarchical namespace(层次命名空 ...

  4. 压缩tar: Removing leading `/’ from member names

    这个错误根据网上的很多说法都是谁 缺少-P参数造成的,只需要使用 -zcvfP即可解决问题,经验证并不是 网上很多文章都是互相抄写的,我引起的这个问题的原因是参数使用的方式不对 -f参数是用来制定压缩 ...

  5. 真实的物理机安装Centos7系统后网卡只有lo没有eno1的解决办法:实际上是物理机未安装网驱动卡

    问题症状: 我真实的物理机安装Centos7系统后,在/etc/sysconfig/目录下查看,发现网卡只有lo没有eno1,出现该问题的实际原因是物理机未安装网驱动卡. 解决办法: 不多说了,让我们 ...

  6. [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)

    有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...

  7. centos 7 163 yum 源 python 2.7.5

    安装 repo 源. repo 源一般包括 base, updates, Extras 三部分. $ cd /etc/yum.repos.d/ $ wget http://mirrors.163.co ...

  8. SelectObject函数

    SelectObject 函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的同样类型的对象. 函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ ...

  9. BZOJ5343: [Ctsc2018]混合果汁 二分答案+主席树

    分析: 整体二分或二分答案+主席树,反正没有要求强制在线,两个都可以做... 贪心还是比较显然的,那么就是找前K大的和...和CQOI的任务查询系统很像 附上代码: #include <cstd ...

  10. Ruby知识总结-一般变量+操作符+if+数组和哈希

    ruby入门掌握其实很简单,下面对我司主要使用的部分入门做一个简单的归纳总结: 本文的文章结构: 1.变量 2.操作符 3.if~else~end .unless 4.数组(Array) 5.哈希(H ...