#P1511. 2024.04.24-暑期实习-第三题-塔子哥的微服务群组

2024.04.24-暑期实习-第三题-塔子哥的微服务群组

题目描述

\qquad上期我们聊到,你为了帮助塔子哥维护云服务器而大打出手。如今,云服务器已经平稳运行并给用户们提供了一系列不错的服务,但是塔子哥仍花了很多时间在运维和数据分析上。

\qquad更形式的,塔子哥为了调研微服务调用情况,对nn个微服务调用数据进行了采集分析,微服务使用数字00n1n-1进行编号,给你一个下标从00开始的数组edgesedges,其中edges[i]edges[i]表示存在一条从微服务ii到微服务edges[i]edges[i]的接口调用。

\qquad为了更好的维护,塔子哥将形成11个环的多个微服务称为微服务群组,一个微服务群组的所有微服务数量为LL,能够访问到该微服务群组的微服务数量为VV,这个微服务群组的内聚值H=LVH=L-V

\qquad已知提供的数据中有11个或多个微服务群组,请按照内聚值HH的结果从大到小的顺序对所有微服务群组(H相等时,取环中最大的数进行比较)排序,输出排在第一的做服务群组,输出时每个微服务群组输出的起始编号为环中最小的数。

输入描述

\qquad第一行输入nn,表示有n个微服务

\qquad第二行为数组edgesedges,其中edges[i]edges[i]表示存在一条从微服务ii到微服务edges[i]edges[i]的接口调用,数字以空格分隔。

数据范围:

\qquadnn == edges.lengthedges.length

\qquad2n1052 \le n \le 10^5

\qquad0edges[i]n10 \le edges[i] \le n - 1

\qquad输入保证edges[i]iedges[i] \ne i

输出描述

\qquad输出排在第一的微服务群组的编号数组,按照环的访问顺序输出,起始编号为环中最小的数,数字以空格分隔。

样例一

输入

4
3 3 0 2

输出

0 3 2

解释

0,3,2组成了微服务群组 (环)a,他的L值为3,对于a来说,只有编号为1的1个微服务可以访问到a,因此a的为1答案输出微服务群组为0 3 2

样例二

输入

12
2 6 10 1 6 0 3 0 5 4 5 8

输出

0 2 10 5

解释

1,6,3组成了微服务群组(环) a1,L1值为3,编号为4、9的2个微服务可以访问到a1,因此√1值为2,H1为L1V1 =1;

0,2,10,5组成了微服务群组 (环) a2,L2值为4,编号为7、8、11的3个微服务可以访问到2,因此v2值为3,H2为L2-V2=1;

先对比H值,H1=H2,H值相等;

再对比环中序号最大值,a1中最大数为6。a2中最大数为10,a2排前面,因此输出答案为:0 2 10 5

Limitation

1s, 1024KiB for each test case.