3170. 小朋友崇拜圈

题目链接

3170. 小朋友崇拜圈

班里 N 个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。

在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。

求满足条件的圈最大多少人?

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

输入格式

第一行,一个整数 N

接下来一行 N 个整数,由空格分开。

输出格式

输出一个整数,表示满足条件的最大圈的人数。

数据范围

3<N<105

输入样例1:

9 3 4 2 5 3 8 4 6 9

输出样例1:

4

样例1解释

如下图所示,崇拜关系用箭头表示,红色表示不在圈中。

显然,最大圈是 [2453] 构成的圈。

image

输入样例2:

30 22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15

输出样例2:

16

解题思路

dfs,有向图最大环数

将每个小朋友当作图上的节点,将每个节点连向他右边的小朋友,记录每个节点的入度,首先将那些入度为 0 的节点删除,因为这些节点一定不在环上,再遍历一遍那些入度不为 0 的节点,再dfs一遍,直到到达起始点更新答案

  • 时间复杂度:O(n)

代码

// %%%Skyqwq #include <bits/stdc++.h> #include <tr1/unordered_map> #include <tr1/unordered_set> //#define int long long #define help {cin.tie(NULL); cout.tie(NULL);} #define pb push_back #define fi first #define se second #define mkp make_pair using namespace std; using namespace tr1; typedef long long LL; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; } template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; } template <typename T> void inline read(T &x) { int f = 1; x = 0; char s = getchar(); while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); } while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar(); x *= f; } template <typename T> void print(T x) { if (x < 0) putchar('-'), x = -x; if (x < 10) putchar(x + 48); else print(x / 10), putchar(x % 10 + 48); } template <typename T> void print(T x, char t) { print(x); putchar(t); } const int N=1e5+5; int n,in[N]; vector<int> adj[N]; int res=0; bool v[N]; void dfs(int x,int cnt,int first) { for(int y:adj[x]) { if(y==first) { res=max(res,cnt); return ; } if(v[y]||!in[y])continue; v[y]=true; dfs(y,cnt+1,first); } } int main() { cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; in[x]++; adj[x].pb(i); } for(int i=1;i<=n;i++) if(in[i]&&!v[i]) { v[i]=true; dfs(i,1,i); } cout<<res; return 0; }

__EOF__

本文作者acwing_zyy
本文链接https://www.cnblogs.com/zyyun/p/16098730.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zyy2001  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示