luogu P1653 猴子
题目传送门:https://www.luogu.org/problemnew/show/P1653
题意:
有n只猴子,每只猴子最多抓住两只猴子。现在有m个时刻,每个时刻有一只猴子放下手中的一只猴子,求每只猴子的掉落时刻。注意:1号猴子永远不会掉落。
思路:
套路题,反向并查集。
每次放下猴子相当于反向重新连边,用个带权并查集维护即可。
代码:
#include<cstdio>
#include<algorithm>
using namespace std;int n,m;int a[200010][2],b[400010][2],fa[200010],ans[200010];bool flag[200010][2];
int find(int x)
{if(fa[x]==x) return x;int p=find(fa[x]);ans[x]=min(ans[x],ans[fa[x]]);return fa[x]=p;
}
void go(int x,int y,int z)
{int t1=find(x),t2=find(y);if(t1!=t2){if(t1==1) fa[t2]=t1,ans[t2]=z;else fa[t1]=t2,ans[t1]=z;}
}
int main()
{scanf("%d %d",&n,&m);for(int i=1;i<=n;i++){scanf("%d %d",&a[i][0],&a[i][1]);fa[i]=i;ans[i]=m+1;}for(int i=1;i<=m;i++){scanf("%d %d",&b[i][0],&b[i][1]);b[i][1]--;flag[b[i][0]][b[i][1]]=true;}for(int i=1;i<=n;i++){if(a[i][0]!=-1&&!flag[i][0]) go(i,a[i][0],m);if(a[i][1]!=-1&&!flag[i][1]) go(i,a[i][1],m);}for(int i=1;i<=n;i++)ans[i]=m+1;for(int i=m;i>=1;i--)if(a[b[i][0]][b[i][1]]!=-1) go(b[i][0],a[b[i][0]][b[i][1]],i-1);for(int i=1;i<=n;i++)printf("%d\n",ans[i]>m?-1:ans[i]);
}
luogu P1653 猴子相关推荐
- P2504 [HAOI2006]聪明的猴子 题解
P2504 [HAOI2006]聪明的猴子 题解 题目 链接 字面描述 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 思路 代码实现 题目 链接 https://ww ...
- luogu P1549 棋盘问题(2) 题解
luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...
- [Luogu] 选学霸
https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...
- “睡眠猴子”团队项目及成员介绍
"睡眠猴子"团队项目及成员介绍 咳咳--软件工程这门课最终还是来到了团队开发的部分,我们宿舍三只经过一下午的讨论和需求分析决定做一款名叫"睡眠猴子"的安卓版手机 ...
- 哈佛管理论丛:谁背上了令人讨厌的猴子
先说说我的读后感想: 在团队管理中,应该尽量明晰的界定每一位团队成员在当前的任务中充当的角色和应该负责的职责. 实际的执行方法就是:约定好给猴子喂食的时间,并且确定在喂食时间到来时,猴子应该长成什么样 ...
- Luogu 2470 [SCOI2007]压缩
和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...
- 熟悉scala命令,scala语言运行超级素数和猴子大王
实验目的 在Linux操作系统中安装Scala 输入"scala"命令,熟悉地运行Scala解释器 scala语言运行超级素数和猴子大王 实验仪器 Virtualbox管理器 实验 ...
- 【Luogu】P1613 跑路
[Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资 ...
- JAVA猴子选大王问题
题目要求 猴子选大王.输入猴子的个数n,所有的猴子从1-n编号排成一圈,从1号猴子开始数数,数到3的倍数猴子被淘汰,最后剩下的是大王.输出是大王的猴子的编号(提示:使用数组,每个数组元素相当于一个猴子 ...
- 约瑟夫环 猴子选大王
<? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...
最新文章
- Docker(六):Docker 仓库管理与镜像加速
- Spring学习(五)——Spring注解(一)
- WP7 开发(十) 处理Html标记
- 【计算机视觉】森林火灾检测-1
- 《Linux下sed命令的使用》
- OpenStack 的部署T版(三)——Glance组件
- 【Mysql】Mysql数据表区分大小写问题解决方案
- token验证+vuex的localStorage应用
- 如何在Qt中使用自定义数据类型
- error C2662
- 数据结构--树形结构(1)
- Chrome 自动播放m3u8
- 色彩原理与色彩搭配知识点回顾总结
- 奥克兰硕士计算机专业学费,【2018新西兰奥克兰大学硕士研究生各专业学费一览】 新西兰奥克兰大学学费...
- EtherCAT之Lan9252调试笔记
- STM32单片机的PSAM卡驱动模块设计
- A ArrayLink for JavaME
- log4j输出多个自定义日志文件、动态配置多个日志文件
- 磁盘块管理器DiskBlockManager
- 507 Lusir的游戏 二分 数论 [代码源][namomo spring camp]每日一题div2