博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷2661 信息传递 三倍经验?
阅读量:5158 次
发布时间:2019-06-13

本文共 854 字,大约阅读时间需要 2 分钟。

问题描述

有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。

游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自己的生日时,游戏结束。请问该游戏一共可以进行几轮?

 

三倍经验?

只要找出最小环的大小就可以,看见题解里有很多拓扑排序的,还有用tarjan的,我用了一个dfs树,如果有返祖的就记录最小的深度。

其他两种做法我还会回来补充上(大概)

 

DFS树

#include
using namespace std;int n,ans=200000000;int to[200005],num[200005],dep[200005],tot;void dfs(int x,int d){ dep[x]=d; num[x]=tot; if(dep[to[x]]){ if(num[to[x]]!=tot)return ; else ans=min(ans,d-dep[to[x]]+1); } else dfs(to[x],d+1);}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&to[i]); } for(int i=1;i<=n;i++){ if(!dep[i]){ tot=i; dfs(i,1); } } printf("%d",ans);}

 

转载于:https://www.cnblogs.com/Elfish/p/7636864.html

你可能感兴趣的文章
matlab 非平稳变化时域分析
查看>>
HBase性能优化方法总结(四):数据计算
查看>>
洛谷 P1002 过河卒
查看>>
The JavaScript this Keyword
查看>>
var $this = $(this)
查看>>
添加了click事件不响应
查看>>
Excel导出失败的提示
查看>>
Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
查看>>
微信支付结果通用通知
查看>>
转载的吐槽文
查看>>
[问题解决]Fresco设置圆角效果不生效问题探究
查看>>
Sourcetree 集成 Azure DevOps Server(Git)
查看>>
CIFAR-10数据集读取
查看>>
选择排序、冒泡排序、获取数组中的最大值
查看>>
Windows 2008 R2 SP1部署WSUS 3.0 SP2
查看>>
CentOS 7下安装Logstash ELK Stack 日志管理系统(下)
查看>>
Android Start感触
查看>>
6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛
查看>>
Android读取JSON格式数据
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>