swjtuoj2433 Magic Mirror
Magic Mirror is an artificial intelligence system developed by TAL AI LAB,It can determine human based on human bone information.
Meternal use the magic mirror API,then he found after he input some photo to the system,it will output the two endpoint features of each bone of the human body.
a bone can be described by a integer pair like (1,2) represent this bone consists of endpoint 1 and endpoint 2 .
We can think that everyone’s bones endpoint features are unique.
But when using the magic mirror's API, Meternal broke all the order, and now you need to help him determine the endpoint features that each person has.
The system may contain some unused information which never included in any bone,please skip them.
The data contains n types of endpoints and m bones which described by a pair.
The first line contains two integer n(1≤n≤200000) and m(1≤m≤200000) ,the number of endpoint and bones.
The following m lines,
each line contains two integer a(1≤a≤n) and b(1≤b≤n),the features of two endpoint of this bone.
The output contains some lines of bone endpoint information.
Please output the information of each person in according order by the smallest endpoint number of this person.
For the i-th line information first outputs the number k, the endpoint contained by this person.
then outputs k endpoint number in ascending order.
When the output is complete, output a line "Finish".
please skip unused endpoint.
6 4
1 3
2 5
3 3
3 4
3 1 3 4
2 2 5
Finish
==========================================================================================================
思路:本题考查查并集的基本操作,输出时要求一个集合一个集合输出,集合内的输出顺序为从小到大,集合间的顺序以集合最小元素按升序输出。
可选用vector来存储一个集合,将元素从小到大遍历,每找到一个未输出的集合,便找到相应的vector输出里面的全部元素。最后一行输出Finish。
注意点:
- 直接暴力搜索每一个元素会超时,将每个集合放在一起可避免无效搜索。
- 两个根节点相同时合并时,会出现错误,不要忘记在合并前判定其根节点是否相等。
1 #include<stdio.h>
2 #include<vector>
3 using namespace std;
4
5 const int Maxn = 200005;
6 int set[Maxn];
7 vector<int> ans[Maxn];
8 int sign[Maxn];
9 void init(){
10 for(int i = 0; i < Maxn; i++){
11 set[i] = -1;
12 }
13
14 }
15
16 int Find(int d1){
17 if(set[d1] < 0){
18 return d1;
19 }
20 set[d1] = Find(set[d1]); //路径压缩
21 return set[d1];
22 }
23
24 void Union(int d1,int d2){
25 int root1 = Find(d1);
26 int root2 = Find(d2);
27 if(root1==root2){
28 return;
29 }
30 if(set[root1] > set[root2]){ //按秩归并
31 set[root2] += set[root1];
32 set[root1] = root2;
33 }else{
34 set[root1] += set[root2];
35 set[root2] = root1;
36 }
37 return ;
38 }
39
40
41 int main(){
42 init();
43 int n,m;
44 scanf("%d %d",&n,&m);
45 while(m--){
46 int d1,d2;
47 scanf("%d %d",&d1,&d2);
48 Union(d1,d2);
49 }
50
51 for(int i = 1; i < Maxn; i++){
52 ans[Find(i)].push_back(i);
53
54 }
55 for(int i = 1; i < Maxn ; i++){
56 if(sign[Find(i)] == 1||set[Find(i)] > -2){
57 continue;
58 }
59 sign[Find(i)] = 1;
60 printf("%d", -set[Find(i)]);
61 for(int j = 0; j < ans[Find(i)].size();j++){
62 printf(" %d",ans[Find(i)][j]);
63 }
64 printf("\n");
65 }
66 printf("Finish");
67 }
swjtuoj2433 Magic Mirror的更多相关文章
- 2018ACM/ICPC 焦作网络预选赛-A Magic Mirror
Jessie has a magic mirror. Every morning she will ask the mirror: 'Mirror mirror tell me, who is the ...
- ACM-ICPC 2018 焦作赛区网络预赛 A Magic Mirror(签到)
https://nanti.jisuanke.com/t/31710 题意 若输入的是Jessie或jessie,输出Good guy!,否则输出Dare you say that again? 分析 ...
- 树莓派:使用OpenCV调用自带的摄像头.
总所周知,树莓派上,调用摄像头的指令有raspistill和raspivid.若要使用opencv对摄像头进行调用,不少人会出现 cvCaptureFromCAM(0)函数无法找到Pi Cam的错误情 ...
- Analysis Guidelines
This section describes some best practices for analysis. These practices come from experience of ana ...
- 2018 ACM 网络选拔赛 焦作赛区
A. Magic Mirror #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- Codeforces Round #359 (Div. 2) A. Free Ice Cream 水题
A. Free Ice Cream 题目连接: http://www.codeforces.com/contest/686/problem/A Description After their adve ...
- ACM-ICPC 2018 焦作赛区网络预赛 Solution
A. Magic Mirror 水. #include <bits/stdc++.h> using namespace std; int t; ]; inline bool work() ...
- Codeforces Round #359 (Div. 2) A
A. Free Ice Cream time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- ACM-ICPC 2018 焦作赛区网络预赛
这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...
随机推荐
- JDK1.8前_HashMap的扩容机制原理
最近在研究hashmap的扩容机制,作为一个小白,相信我的理解,对于一些同样是刚刚接触hashmap的白白是有很很大的帮助,毕竟你去看一些已经对数据结构了解透彻的大神谈hashmap的原理等,人家说的 ...
- C++ “string”: 未声明的标识符
转载:https://blog.csdn.net/kkkmmmjjjj/article/details/53780549 解决方案: 要添加using namespace std;语句在宏定义后面. ...
- AE2018简单的编辑
来源:https://jingyan.baidu.com/article/1876c8525cf522890a137651.html Ae 2018 怎样锁定图层,阻止对图层进行编辑? 听语音 原创 ...
- Arduino 模拟引脚
Arduino的模拟引脚的引用,网上不错的一篇文章 参考:http://blog.sina.com.cn/s/blog_156e62ef90102xjio.html 模拟引脚 本文是对于Arduino ...
- 【题解】X龙珠
明天好像要考链表今晚笔者来了解下. 题目链接 解: 对于这道题,由于前面要与后面重新连起来,于是我们考虑链表. 我们先正常用链表维护关系.然后,我们从大到小枚举. 对于这个数,如果它后面有数(因为是一 ...
- Jetson AGX Xavier/ubuntu查找文件
用以下命令查找文件 sudo updatedb locate xxx #xxx是文件名 如果找不到命令,则需要安装mlocate sudo apt-get install mlocate
- GML与KML的区别
1.GML是基于XML的地理信息的传输.存储编码,它包括空间的和非空间的地理特征和地理范畴.GML是空 间数据编码.传输.存储.发布的国际标准KML是一个OGC标准 2.GML专注于地理信息的结构与内 ...
- 2016年 实验五 Internet与网络工具的使用
实验五 Internet与网络工具的使用 [实验目的] 本实验目的在于掌握 Telnet.FTP.Email的工作机理,并会在 Internet 上熟练使用相关工具软件. [实验条件] ⑴.个人计算机 ...
- JVM系列【6】GC与调优1
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 GC基础知识 什么是垃圾 没有任何引用指向的一个对象或多个对象(循环引 ...
- java基础小程序—万年历
package day02.xiangmu.wannianli; import java.util.Scanner; public class CalendarTest { public static ...