传送门

题意

分析

每次插入人名与邮箱的时候,做一次并查集,然后做一次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. xcode打包 提交到iTunesConnect

    1.首先确定发布app的所必要选中或者切换的弄好 比如切换环境到 由测试环境切换到正式环境. 2.打发布包 首先选中Product 然后选中Archive. 3.等待编译. 4.打包成功 会进入到下面 ...

  2. 【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS

    一,对称加密 所谓对称加密.就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的步骤例如以下: 发送端和接收端首先要共享同样的密钥k(即通信前两方都须要知道相应 ...

  3. Erlang二进制模式匹配

    Erlang的模式匹配用来处理二进制数据可谓是得心应手.不仅直观,而且超乎想象的简单.在C++中,处理二进制数据首先要管理缓冲区.然后再按字节进行操作,如果要处理的数据不是按字节对齐,则需要进行位移等 ...

  4. wcf系列(一)--- 寄宿方式

    一.自我寄宿(self-hosting) 1.wcf采用基于终结点(Endpoint)的通信手段:终结点由:地址(Address)+绑定(Binding)+契约(Contract)组成:  Enpoi ...

  5. office web apps 整合到自己项目中(wopi实现在线预览编辑)

    借助office web apps实现在线预览和在线编辑 我所有的代码都是用go语言编写,你可以直接编译后使用,不用再有其他的操作. 最近项目实在太忙,这几天才有时间,这次是重头戏,要好好琢磨一下怎么 ...

  6. Whats the difference between service tomcat ./startup.sh and ./catalina.sh run

    stack overflow 给出的答案: catalina.sh run starts tomcat in the foreground, displaying the logs on the co ...

  7. spring boot 使用redis 及redis工具类

    1-添加maven依赖 2-添加redis配置 3-工具类 1-添加maven依赖 实际上是封装了jedis <!-- redis 依赖--> <dependency> < ...

  8. HDU 1878(1Y) (判断欧拉回路是否存在 奇点个数为0 + 一个联通分量 *【模板】)

    欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 客户端调用cxf发布的服务

    import java.util.ArrayList; import java.util.List; import javax.xml.namespace.QName; import org.apac ...

  10. webstorm代码提示按键改为alt+/

    webstorm代码提示默认按键为ctrl+空格 但是windows输入法中英文输入法的默认按键也是ctrl+空格 这就导致webstorm按键冲突,无法使用代码快捷提示按键 解决方法: 按ctrl+ ...