题目链接:https://www.luogu.org/problemnew/show/P2661#sub

一种利用并查集求最小环的做法:

对于每个同学看作一个点,每次信息传递是一条有向边,当出现最小环的时候就是所求游戏轮数。

那么我们在并查集上进行一些改动,用dep数组来保存路径的长度,即轮数。

如果有两个点的父节点相同,即组成了一个环。

注意的是要开一个last变量记录父节点(不记录就会在递归中被更新)。

 #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = ;
int fa[maxn], dep[maxn], n, ans = 0x7fffffff;
int find(int x)
{
if(fa[x]!=x)
{
int last = fa[x];
fa[x] = find(fa[x]);
dep[x] += dep[last];
}
return fa[x];
}
void check(int a,int b)
{
int x = find(a);
int y = find(b);
if(x!=y){fa[x] = y; dep[a] = dep[b]+;}
else ans = min(dep[a]+dep[b]+,ans);
return;
}
int main()
{
int a;
scanf("%d",&n);
for(int i = ; i <= n; i++) fa[i] = i;
for(int i = ; i <= n; i++)
{
scanf("%d",&a);
check(i,a);
}
printf("%d",ans);
}

【luogu P2661 信息传递】 题解的更多相关文章

  1. 洛谷 P2661 信息传递 题解

    P2661 信息传递 题目描述 有 \(n\) 个同学(编号为 \(1\) 到 \(n\) )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 \(i\) 的同学的信息传 ...

  2. luogu P2661 信息传递 x

    P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...

  3. 洛谷p2661信息传递题解

    题目 这个题一眼看上去就是用并查集求最小环. 我们可以设两个数组分别是f,d分别表示该点的爸爸和该点到祖先的距离. 当该点的爸爸等于他时,那他肯定就是祖先. 此时信息就肯定传递完了,此时的整个图中(我 ...

  4. Luogu P2661 信息传递

    传送门 一眼就能看出来是个并查集 但是并不会写... 看了一下题解说是并查集求最小环qwq 所以,每次加入第i个小同学,判断如果他要告诉的小同学k最后会告诉他(也就是转回来了), 就说明出现了一个环, ...

  5. 洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2

    P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...

  6. P2661 信息传递

    P2661 信息传递dfs求最小环,要加时间戳,记录这个点是哪一次被dfs到的.] #include<iostream> #include<cstdio> #include&l ...

  7. P2661 信息传递 DFS

    题目链接:洛谷 P2661 信息传递 一个人要想知道自己的生日,就意味着信息的传递是成环的,因为每轮信息只能传递一个人,传递的轮数就等于环的大小 环的大小就等于环中的两个点到第三个点的距离之和加一,我 ...

  8. 洛谷P2661 信息传递(最小环,并查集)

    洛谷P2661 信息传递 最小环求解采用并查集求最小环. 只适用于本题的情况.对于新加可以使得两个子树合并的边,总有其中一点为其中一棵子树的根. 复杂度 \(O(n)\) . #include< ...

  9. 洛谷 P2661 信息传递(并查集 & 最小环)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P2661 这道题和一些比较水的并查集不太一样,这道题的思路就是用并查集来求最小环... 首先,如果我们 ...

随机推荐

  1. 60分钟内从零起步驾驭Hive实战学习笔记(Ubuntu里安装mysql)

    本博文的主要内容是: 1. Hive本质解析 2. Hive安装实战 3. 使用Hive操作搜索引擎数据实战 SparkSQL前身是Shark,Shark强烈依赖于Hive.Spark原来没有做SQL ...

  2. Java学习第十七天

    1:登录注册案例(理解) 2:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法: ...

  3. Shell脚本检测程序,如果挂了就重启程序

    脚本如下: #!/bin/sh #要检查的进程名 PROGRESS_NAME="heihu_server" #----------------------------------- ...

  4. js经验点滴js apply/call/caller/callee/bind使用方法与区别分析

    一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). Js代码 call([thisObj[,arg1[, arg2[, ...

  5. FontAwesome 图标 class="fa fa-home"

    本文转自:http://www.yeahzan.com/fa/facss.html 引用方式: class="fa fa-home" 注意:每个图标的引用都必须要添加 fa fa- ...

  6. 4、Angular2 pipe

    1. stateless pipe 2.stateful pipe

  7. 文档生成工具Sandcastle Help File Builder

    Sandcastle Help File Builder   http://shfb.codeplex.com/

  8. javascript获取后台传来的json

    Mvc Razor视图引擎中 <script type="text/javascript"> var _temp = @(new MvcHtmlString(this. ...

  9. Thrift笔记(二)--Thrift框架分层设计

    thrift架构设计使用了分层设计,类似TCP/IP分层,上次使用下层提供的服务.分层设计在计算机中是一个常用的设计,上层和下层定义好接口或者说协议,下层实现可以随意更换,只要实现好定义的接口和协议就 ...

  10. 洛谷P1966 火柴排队(逆序对)

    题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...