P1653 猴子

题目描述

有N只猴子,第一只尾巴挂在树上,剩下的N-1只,要么被其他的猴子抓住,要么抓住了其他的猴子,要么两者均有。当然一只猴子最多抓两只另外的猴子。现在给出这N只猴子抓与被抓的信息,并且在某个时刻可能某只猴子会放掉它其中一只手的猴子,导致某些猴子落地。求每只猴子落地的时间。

输入输出格式

输入格式:

第一行两个数N、M,表示有N只猴子,并且总时间为M-1。接下来N行,描述了每只猴子的信息,每行两个数,分别表示这只猴子左手和右手抓的猴子的编号,如果是-1,表示该猴子那只手没抓其他猴子。再接下来M行,按时间顺序给出了一些猴子放手的信息,第1+N+i行表示第i-1时刻某只猴子的放手信息,信息以两个数给出,前者表示放手的猴子编号,后者表示其放的是哪只手,1左2右。

数据规模

30%的数据,N≤1000,M≤1000;

100%的数据,1≤N≤200000,1≤M≤400000。

输出格式:

共输出N行,第i行表示第i只猴子掉落的时刻,若第i只猴子岛M-1时刻以后还没掉落,就输出-1。


这个题目很好,有几个方法可以解决。

方法1:各式各样的并查集
这里介绍一种我的写法。

首先,做过差不多此类提醒的题目应该可以意识到我们此时需要倒序连边处理。

剩下的,就是在连接时,当某棵树连接到1节点时,更新这个树所有点的时间。

我使用前向星存父亲对儿子的连边,以遍历这颗树

为了保持树的形态,我使用按秩合并而不是路径压缩。

Code:

#include <cstdio>
#include <cstring>
int max(int x,int y){return x>y?x:y;}
const int N=400010;
int head[N],Next[N],to[N],cnt;
void add(int u,int v)
{Next[++cnt]=head[u];to[cnt]=v;head[u]=cnt;
}
int ch[N][2],is[N][2],ans[N],f[N],h[N],n,m,q[N][2];
int Find(int x)
{if(f[x]==x) return x;return Find(f[x]);
}
void Merge(int x,int y)
{int rx=Find(x),ry=Find(y);if(rx==1||(h[rx]>h[ry]&&ry!=1)){add(rx,ry);f[ry]=rx;h[rx]=max(h[rx],h[ry]+1);}else{add(ry,rx);f[rx]=ry;h[ry]=max(h[ry],h[rx]+1);}
}
void dfs(int now,int t)
{if(~ans[now]) return;ans[now]=t;for(int i=head[now];i;i=Next[i]){int v=to[i];dfs(v,t);}
}
int main()
{memset(ans,-1,sizeof(ans));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d",ch[i],ch[i]+1);f[i]=i,h[i]=1;}for(int i=0;i<m;i++){scanf("%d%d",q[i],q[i]+1);is[q[i][0]][--q[i][1]]=1;}#define u q[i][0]#define v ch[q[i][0]][q[i][1]]#define ls ch[i][0]#define rs ch[i][1]for(int i=1;i<=n;i++){if(!is[i][0]&&(~ls)&&Find(i)!=Find(ls)) Merge(i,ls);if(!is[i][1]&&(~rs)&&Find(i)!=Find(rs)) Merge(i,rs);}for(int i=m-1;~i;i--){int x=Find(u),y=Find(v);if(x!=y) Merge(x,y);if(Find(x)==1&&x!=1) dfs(x,i);if(Find(y)==1&&y!=1) dfs(y,i);}for(int i=1;i<=n;i++) printf("%d\n",ans[i]);return 0;
}

方法2:神奇的最短路建模

以边消失的时间为权值按原图进行连边,而没断的边置正无穷。

以\(1\)为源点,找到 对某个终点的路径中 所有路径的最小值 中的 最大值

路径的最小值代表这条边的断掉,但只断掉一条边不行,所以我们要找最小值的最大值

有意思的是,拯救小云公主这个题也用到了这个思想,只不过建模更难想。

没写代码


2018.8.6

转载于:https://www.cnblogs.com/butterflydew/p/9432156.html

洛谷 P1653 猴子 解题报告相关推荐

  1. 洛谷1042 乒乓球 解题报告

    洛谷1042 乒乓球 本题地址: http://www.luogu.org/problem/show?pid=1042 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球 ...

  2. 洛谷 [POI2007]BIU-Offices 解题报告

    [POI2007]BIU-Offices 题意 给定\(n(\le 100000)\)个点\(m(\le 2000000)\)条边的无向图\(G\),求这个图\(G\)补图的连通块个数. 一开始想了半 ...

  3. 洛谷 P3959 宝藏 解题报告

    P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小 ...

  4. 【洛谷月赛】洛谷三月月赛题解报告

    昨天就是洛谷三月月赛,小编考的并不好,才31分,隔壁大佬50分,于是小编决定改一改题,先看第一题: P5238 整数校验器 题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法 ...

  5. 洛谷P5082 成绩解题思路及题解

    讨论 858 通过 3.6K 提交 题目提供者 vercont 评测方式 云端评测 标签 难度 入门难度 时空限制 1000ms / 128MB 提交 题解 提示:收藏到任务计划后,可在首页查看. 最 ...

  6. 【洛谷】P4147 玉蟾宫 解题报告

    [洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...

  7. 【洛谷新手村解题报告二】C++语言,一题多解,思路和WA反思

    [洛谷新手村解题报告二] 循环!循环!循环! 数组 继续上次的一!开始循环第二题 循环!循环!循环! 第二题 级数求和 [1/2] 已知:Sn= 1+1/2+1/3+-+1/n 显然对于任意一个整数 ...

  8. 【洛谷新手村解题报告三 字符串/递归前】C++语言,一题多解,思路和WA反思

    [洛谷新手村解题报告三] 简单字符串 过程函数与递归 首先下一部分!字符串,这个前面两题新手跳过吧 简单字符串 第三题 统计单词数 [2/2] 给定一个单词,请你输出它在给定的文章中出现的次数和第一次 ...

  9. 洛谷【C++编程基础】递归函数初步 专题解题报告

    洛谷[C++编程基础]递归函数初步 专题解题报告 T1-T89304 递归求和 题目描述 用递归的方法求1+2+3+4+-+(n-1)+n的值. 输入格式 一个整数n.(1<=n<=100 ...

  10. 洛谷1056 排座椅 解题报告

    洛谷1056 排座椅 本题地址: http://www.luogu.org/problem/show?pid=1056 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头 ...

最新文章

  1. Jerry Wang的微信公众号开发系列文章
  2. [vue-element] 你有二次封装过ElementUI组件吗?
  3. 【转】1.7异步编程:基于事件的异步编程模式(EAP)
  4. Elasticsearch之中文分词器插件es-ik(博主推荐)
  5. python之数据运算、字典、列表
  6. Python 清屏命令
  7. pert图java_甘特图和PERT图
  8. java实现影视创作论坛
  9. python三维图形注释_python – Matplotlib:注释3D散点图
  10. 用微信公众号写博客就是玩,要动真格的还是得WordPress!
  11. HDU- 1151 Air Raid(最小路径覆盖)
  12. 感动!刘若英和陈升的那些往事
  13. E. B. Browning: Sonnets from the Portuguese
  14. 前端——HTML,CSS
  15. polyfit多项式拟合函数的用法
  16. (转)dl,dt,dd标签的解析
  17. 移动应用开发测试工具Bugtags集成和使用教程
  18. python文字识别前端_Python文字识别
  19. 《uni-app》一个非canvas的飞机对战小游戏实现-敌机模型实现
  20. 关于安装win7系统时出现0x0000007b电脑蓝屏代码的问题

热门文章

  1. asp.net开发wap程序必备:识别来访手机品牌型号【来源网络】
  2. 背英语句子,来巧记单词
  3. 李开复就中国移动开发者大会的演讲总结
  4. camera一些常见名词缩写
  5. 电脑报独家报道:宽带升级全国真相调查
  6. 【OI好题推荐 #1】洛谷-P1183 多边形的面积
  7. PL3368C电源管理IC是什么,充电器电源IC用ASEMI-PL3368C
  8. java代码生成springdao_可一键生成dao、表、controller等几十种的代码生成器源码分享...
  9. SQOOP学习笔记-报错怎么办?打就完了!
  10. 解读制造业数字化转型的六大因素