题目描述
班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?

小朋友编号为1,2,3,…N

输入
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
输出
要求输出一个整数,表示满足条件的最大圈的人数。
样例输入
9
3 4 2 5 3 8 4 6 9
样例输出
4
思路:首先根据输入,建图。对于建好的图,我们的任务就是去找这个图中最大的环。首先我们将度为1的点去除掉之后,就直接dfs求出每一个环的长度,取最大值就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e5+100;
struct edge{int to,next;
}e[maxx<<1];
int head[maxx<<1],deg[maxx],vis[maxx];
int n,tot;inline void init()
{memset(head,-1,sizeof(head));for(int i=1;i<=n;i++) deg[i]=vis[i]=0;tot=0;
}
inline void add(int u,int v)
{e[tot].to=v,e[tot].next=head[u],head[u]=tot++;
}
inline int dfs(int u,int num,int f)
{if(vis[u]) return num;vis[u]=1;num++;for(int i=head[u];i!=-1;i=e[i].next){int to=e[i].to;if(to==f) continue;return dfs(to,num,u);}
}
int main()
{scanf("%d",&n);int x;init();for(int i=1;i<=n;i++){scanf("%d",&x);add(i,x);deg[i]++;deg[x]++;}queue<int> q;while(q.size()) q.pop();for(int i=1;i<=n;i++) if(deg[i]==1) q.push(i);while(q.size()){int u=q.front();q.pop();deg[u]--;for(int i=head[u];i!=-1;i=e[i].next){int to=e[i].to;deg[to]--;if(deg[to]==1) q.push(to);}}int _max=0;for(int i=1;i<=n;i++){if(deg[i]&&vis[i]==0){_max=max(_max,dfs(i,0,-1));}}cout<<_max<<endl;return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][2018年第九届真题]小朋友崇拜圈(简单图论)相关推荐

  1. [蓝桥杯][2018年第九届真题]小朋友崇拜圈、耐摔指数、堆的计数、缩位求和、约瑟夫环

    个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 小朋友崇拜圈 耐摔指数 堆的计数 缩位求和 约瑟夫环 小朋友崇拜圈 题目描述 班里N个小朋友,每个人都 ...

  2. C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)

    一.stringstream介绍 stringstream是 C++ 提供的一个字符串流(stream),,必须包含其头文件: #include <sstream> < sstrea ...

  3. [蓝桥杯][2018年第九届真题]整理玩具(树状数组)

    题目描述 小明有一套玩具,一共包含NxM个部件.这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件. 每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数. 小 ...

  4. [蓝桥杯][2018年第九届真题]调手表(BFS)

    题目描述 小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在 ...

  5. [蓝桥杯][2018年第九届真题]版本分支(离线LCA模板)

    题目描述 小明负责维护公司一个奇怪的项目.这个项目的代码一直在不断分支(branch)但是从未发生过合并(merge). 现在这个项目的代码一共有N个版本,编号1~N,其中1号版本是最初的版本. 除了 ...

  6. [蓝桥杯][2018年第九届真题]调手表-bfs

    小明买了块高端大气上档次的电子手表,他正准备调时间呢.在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟.大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候, ...

  7. [蓝桥杯][2018年第九届真题]全球变暖

    全球变暖 题目描述 思路解析 AC代码 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... . ...

  8. 题目 2194: 蓝桥杯2018年第九届真题-递增三元组

    答题记录: 第一次做:答案错误  审题出错 第二次做:时间超限,用了3 个for循环 做了13'分钟 代码出错: for循环中循环变量写错 第三次做:答案正确,用哈希表化简时间复杂度,(减少一个for ...

  9. 蓝桥杯2018年第九届真题——乘积尾零

    乘积尾零 一.题目内容 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 ...

最新文章

  1. layer.js 弹窗组件API文档
  2. Python模块unittest
  3. helloworld设置成开机自启动的服务
  4. html 如何用图片代替单选按钮,HTML中图像代替提交按钮
  5. 目前可能最快的下载百度网盘文件的方法(aria2下载)
  6. 如何让context attribute不出现在configuration界面的available fields列表内
  7. python列表的表示形式_python 列表推导式
  8. python简单网络爬虫_【Python】 简单网络爬虫实现
  9. Linux源码下Makefile详解(参照Documentation\kbuild\makefiles.txt和资料)-转
  10. 新时达服务器说明书_新时达电梯主板操作服务器使用手册操作说明书使用说明...
  11. 程序员删库跑路,开源开发者的出路在哪里
  12. 用单片机实现流水灯(进阶版)
  13. bugku-加密-题解
  14. 爱剪辑如何在一个视频片段中设置多个定格、快进、慢动作?
  15. 压缩包设置了解压码忘记了怎么办?
  16. 数据中台建设方案-基于大数据平台(下)
  17. 无代码开发的未来是什么样的?
  18. 埃森哲2021财年第三季度全球营收达133亿美元;富士胶片创新解决方案新成员亮相CHINA PRINT 2021 | 全球TMT...
  19. 停不下来!程序员在GitHub上开源了一个自制表情包项目
  20. Seq2Seq实战——机器翻译

热门文章

  1. elementui 如何修改表格里面cell的样式
  2. leetcode 两数相加c++_167. 两数之和 II - 输入有序数组
  3. mysql相关文献及翻译_MySQL数据库管理外文翻译文献中英文.doc
  4. linux之V4L2摄像头应用流程
  5. 选择时间日历控件DatePickerDialog实现(从外包项目中挖出来整理的)
  6. python轮胎_如何用数据分析方法剖析途虎轮胎数据
  7. 获取IPhone相册中图片的方法(包括获取所有图片)
  8. svn提交错误file is scheduled for addition, but is missing
  9. Android内存泄漏
  10. Swing的设计是MVC的典范