传送门

题意

分析

每次插入人名与邮箱的时候,做一次并查集,然后做一次sort即可

trick

3

a 1 first@hihocoder.com

b 1 second@hihocoder.com

c 2 first@hihocoder.com second@hihocoder.com

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a)) int n,m;
struct node
{
int depth,fa;//节点深度及父亲/编号
string name;
node(const string &str,int depth,int id):name(str),depth(depth),fa(id){}
bool operator<(const node &p)const
{
return (fa==p.fa)?depth<p.depth:fa<p.fa;//按父亲排序,再按深度排序
}
};
vector<node>point;//记录所有的点
int find(int u){ return (point[u].fa==u)?u:point[u].fa=find(point[u].fa); }
void merge(int u,int v)
{
int fu=find(u),fv=find(v);
if(fu!=fv)
{
if(point[fu].depth>point[fv].depth) swap(fu,fv);
}
point[fv].fa=fu;
}
char buf[10010];
unordered_map<string,int>mp;//hash_map返回字符串对应的id
int get_id(const string &buf,int time)//获取id
{
if(mp.count(buf)) return mp[buf];
int sz=mp.size();
point.push_back(node(buf,time,sz));
return mp[buf]=sz;
}
vector<int>user;
int main()
{
scanf("%d",&n);
int tot=0;
F(i,1,n)
{
scanf("%s",buf);
int u=get_id(buf,tot++);
user.push_back(u);
scanf("%d",&m);
F(j,1,m)
{
scanf("%s",buf);
int v=get_id(buf,tot++);
merge(u,v);//将人名与邮箱相连接
}
}
for(auto u:user) find(u);//对于每个人名都做一次并查集
vector<node>ans;
for(auto u:user) ans.push_back(point[u]);
sort(ans.begin(),ans.end());//排序
for(int u=0;u<n;++u)
{
printf("%s",ans[u].name.c_str() );
if(u<n-1&&ans[u].fa==ans[u+1].fa) putchar(' ');
else putchar('\n');
}
return 0;
}

hihocoder #1335 : Email Merge(map+sort)的更多相关文章

  1. [大牛翻译系列]Hadoop(5)MapReduce 排序:次排序(Secondary sort)

    4.2 排序(SORT) 在MapReduce中,排序的目的有两个: MapReduce可以通过排序将Map输出的键分组.然后每组键调用一次reduce. 在某些需要排序的特定场景中,用户可以将作业( ...

  2. 分布式基础学习(2)分布式计算系统(Map/Reduce)

    二. 分布式计算(Map/Reduce) 分 布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件 系统,很 ...

  3. 分布式基础学习【二】 —— 分布式计算系统(Map/Reduce)

    二. 分布式计算(Map/Reduce) 分布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件系统,很大程 ...

  4. 斗地主的综合案例实现(Map有序)

    斗地主的综合案例实现(Map有序) 整体思路 代码实现 import java.util.ArrayList; import java.util.Collections; import java.ut ...

  5. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  6. hihoCoder 1432 : JiLi Number(吉利数)

    hihoCoder #1432 : JiLi Number(吉利数) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Driver Ji l ...

  7. 堆排序(Heap Sort)的C语言实现

    堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值, ...

  8. 快速排序(Quick Sort)的C语言实现

    快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤 ...

  9. 排序算法 (sorting algorithm)之 冒泡排序(bubble sort)

    http://www.algolist.net/Algorithms/ https://docs.oracle.com/javase/tutorial/collections/algorithms/ ...

随机推荐

  1. h5的复制功能

    js+html5实现复制文字按钮 <div> <input type="text" name="guanfangaddress" id=&qu ...

  2. iOS非常全的第三方库

    iOS ● 非常全的三方库.插件.大牛博客等等   github排名:https://github.com/trending, github搜索:https://github.com/search. ...

  3. c# 委托 Predicate的使用示例

    一.说明 委托Predicate 可以有参数(比如下面的示例),也可以不带参数,委托Predicate是返回固定值bool值的委托 二.示例代码(控制台程序) using System; using ...

  4. Centos7利用kvm搭建Windows虚拟机

    这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...

  5. Objective-C 学习笔记

    1. Hello, World #import <Foundation/Foundation.h> int main() {    /* my first program in Objec ...

  6. UVA1025 A Spy in the Metro —— DP

    题目链接: https://vjudge.net/problem/UVA-1025 题解: 详情请看紫书P267. 与其说是DP题,我觉得更像是模拟题,特别是用记忆化搜索写. 递推: #include ...

  7. JavaScript Constructors

    Understanding JavaScript Constructors It was: 1) This article is technically sound. JavaScript doesn ...

  8. easyui tree 树形节点 formatter 渲染不起作用

    接了个需求,需要对一个树形列表进行重新渲染,在进行渲染的过程中发现树形节点的formatter 属性无法生效.经反复测试,发现在外部环境中正常,但在项目环境中始终无效.最终发现问题出在 easyui ...

  9. 【python】string functions

    1.str.replace(word0,word1)  ##用word1替换str中所有的word0 >>> 'tea for too'.replace('too', 'two') ...

  10. 在KitKat(Android 4.4.2) 推送网址给手机

    弱者才会回避问题. 最近想把网址推送给手机实现后台下载,打算故技重施,用短信传送然后中断广播的方法实现隐蔽传送.试了半天发现怎么现在拦不住短信了.查了一下才发现原来Android4.4增加了一个安全机 ...