牛客NC15976--小C的周末(并查集+map计数)
愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M。每个游戏都是多人游戏,他们打算周末一起打游戏。
小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一款游戏),并且每人手上都有一台游戏机,这种游戏机可以通过特定的游戏机连接线连接起来。
但是,他们面临着一个问题:目前没有一个朋友的游戏机是互相连接的。所以它们必须用可用的游戏机连接线连接起来。小C决定依次使用第 i 条连接线把他的朋友 ui 和 vi 的游戏机连接起来。也就是说,假设有Q条连接线,小C只能先使用第一条,然后使用第二条,然后使用第三条。。。最后使用第Q条。
一个游戏能开始的条件是所有玩这个游戏的朋友的游戏机都被连接起来(如果不是直接连接的话,那么就必须存在一条连接它们的路径)。他们希望尽快开始比赛。
在每个游戏中,找出在添加了第几条连接线之后能开始游戏。如果在一个游戏中只有一个人玩,则输出0(因为他立马可以开始游戏)。如果不存在,则输出-1
输入描述:
多组输入
第一行包含三个整数N,M,Q。
第二行给N个用空格分隔的整数,第 i 个整数代表第 i 个朋友想玩的游戏。
接下来的Q行,每行两个整数(u, v),代表电线 i 连接的两个人的电脑
1 <= N, M <= 10^5,0 <= Q <= 10^5
输出描述:
对于每个游戏,输出一个整数,表示添加了第几条连接线之后能开始游戏,每行以换行符结束
输入:
5 2 4
1 2 2 2 1
1 2
2 3
1 5
4 5
输出:
3
4
说明:
第一个游戏有两个人参加(1,5),在添加了第三条电线之后他们电脑互相连接第二个游戏三个人参加(2, 3, 4),在添加第四条电线之后他们电脑互相连接
解析:利用map[ i ][ j ]来记录第 i 个人所在集合中 j 游戏的个数,然后每次合并集合,将小的集合合并入大集合中。
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
unordered_map<int,int> mp[N];//记录第i个人所在集合中j游戏的个数
int cnt[N],f[N],ans[N];
int find(int x)
{if(f[x]!=x) f[x]=find(f[x]);return f[x];
}
int main()
{int n,m,q,k;while(~scanf("%d%d%d",&n,&m,&q)){for(int i=1;i<=m;i++) ans[i]=-1,cnt[i]=0;//多组初始化for(int i=1;i<=n;i++) mp[i].clear();for(int i=1;i<=n;i++){f[i]=i;scanf("%d",&k);mp[i][k]++;cnt[k]++;}for(int i=1;i<=q;i++){int a,b;scanf("%d%d",&a,&b);a=find(a),b=find(b);if(a!=b)//如果不在同一个集合中{if(mp[a].size()>mp[b].size()) swap(a,b);f[a]=b;for(auto it:mp[a]){int x=it.first,y=it.second;//x表示游戏编号,y表示数量mp[b][x]+=y;if(mp[b][x]==cnt[x]) ans[x]=i;//记录答案}}}for(int i=1;i<=m;i++){if(cnt[i]==1) printf("0\n");//如果第i个游戏就一个,那么可以直接开始else printf("%d\n",ans[i]);}}return 0;
}
牛客NC15976--小C的周末(并查集+map计数)相关推荐
- 【牛客 - 157B】凤凰(树上并查集,dfs)
题干: 链接:https://ac.nowcoder.com/acm/contest/157/B 来源:牛客网 题目描述 传说,凤凰是百鸟之王.有一天,凤凰要召开百鸟大会,百鸟国是一个由n个节点组成的 ...
- 牛客-Forsaken喜欢独一无二的树【并查集,最小生成树】
正题 题目链接:https://ac.nowcoder.com/acm/contest/1221/H 题目大意 给一张图,要求删掉一些边使得最小生成树权值不变,然后求删掉的边的最小权值. 解题思路 我 ...
- 白魔法师(牛客小白月赛25 图、并查集)
白魔法师 链接:https://ac.nowcoder.com/acm/contest/5600/C 题目描述 你是一个白魔法师. 现在你拿到了一棵树,树上有 nnn 个点,每个点被染成了黑色或白色. ...
- 牛客题单——同余、并查集
题单链接 Strange Way to Express Integers(表示整数的奇怪方式) 这道题之前已经写过了,不重复写了,下面是链接 中国剩余定理 程序自动分析 这道题很明显是用并查集解决的 ...
- 牛客网-小周的曲射炮
牛客网-小周的曲射炮(公式推导) 题目描述 小周最近在玩一款二战游戏,他因而对曲射炮的轨迹产生了很大的兴趣,但是在尝试计算后,小周发现这个问题并不是那么简单,他因而来请教你这位计算机高手,请你来帮帮他 ...
- 【牛客CMB2 小招喵跑步】
牛客CMB2 小招喵跑步 题目 解题思路 代码实例 运行代码 题目 小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是: 1.数轴上向前走一步,即n=n+1 2.数轴上向后走一步 ...
- 牛客网 - 小乐乐打游戏(BFS)
链接:https://ac.nowcoder.com/acm/contest/301/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 牛客网小bai月赛40
牛客网小白月赛40 A 数字游戏 B 跳跳跳 D 优美字符串 E 分组 F 过桥 G 空调遥控 I 体操队形 牛客比赛页面跳转 这是一篇菜鸟的自我总结,大佬勿喷,轻点轻点~ A 数字游戏 题目意思: ...
- 牛客网 小睿睿的方案 解题报告
小睿睿的方案 链接: https://ac.nowcoder.com/acm/contest/371/C 来源:牛客网 题目描述 小睿睿虽然已经是人生赢家了,但当他看见学校里其他人秀恩爱时仍旧会十分不 ...
最新文章
- C语言的time函数
- 使用Silverlight for Embedded开发绚丽的界面(1)
- 联想电脑的一键换机软件——乐换机
- 网易云信10月大事记
- 判断小米华为等系统 MD
- 使用FFMpeg进行H264编码
- 【白话模型量化系列一】矩阵乘法量化
- 【渝粤教育】21秋期末考试社会学概论10082k1
- Openwrt 摄像头使用
- 怎么快速把wmv视频格式转换成mp4视频
- 【MDT】iPhone XS 系列屏幕素质报告
- 何为“定向融资计划”?适合你投资吗?
- **Gcc编译器报错:gcc -m32报错**
- 爬虫学习笔记(十八)—— 点触验证码:超级鹰、12306自动登录
- 华为手环7和小米手环7的区别 哪个好
- 【01月18日】【精彩电影合集】【10部】【亲测】【Lsyq5647发布】
- linux socket inet_addr,linux c socket ip地址字符串数字转换 inet_addr inet_ntoa
- 程序员必备的英语词汇 (1)
- IQM的Q-Exa联盟被选中将德国量子计算机首次集成到HPC超级计算机
- [附源码]计算机毕业设计健身房预约平台Springboot程序