#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> topo, group, group_size, memo;
vector<bool> visited;
vector<vector<int>> group_nodes, graph, r_graph, graph2;
void topoSort(int node) {
visited[node] = true;
for (int next : graph[node]) {
if (!visited[next]) {
topoSort(next);
}
}
topo.push_back(node);
}
void dfs(int node, int group_id, vector<int>& comp) {
group[node] = group_id;
comp.push_back(node);
for (int next : r_graph[node]) {
if (group[next] == -1) {
dfs(next, group_id, comp);
}
}
}
void dfs2(int node) {
if (memo[node] != -1) return;
memo[node] = 0;
int sum = 0;
for (int next : graph2[node]) {
if (memo[next] == -1) {
dfs2(next);
}
sum += memo[next];
}
memo[node] = sum + group_size[node];
}
int main()
{
cin >> n;
visited.assign(n + 1, false);
group.assign(n + 1, -1);
graph.assign(n + 1, vector<int>(0));
r_graph.assign(n + 1, vector<int>(0));
group_nodes.push_back(vector<int>(0));
for (int i=1; i <= n; i++) {
int u;
cin >> u;
graph[i].push_back(u);
r_graph[u].push_back(i);
}
for (int i=1; i <= n; i++) {
if (!visited[i]) {
topoSort(i);
}
}
reverse(topo.begin(), topo.end());
int number_of_groups = 1;
for (int node : topo) {
if (group[node] == -1) {
vector<int> components(0);
dfs(node, number_of_groups++, components);
group_nodes.push_back(components);
}
}
group_size.assign(number_of_groups, 0);
for (int g = 1; g < number_of_groups; g++) {
group_size[g] = group_nodes[g].size();
}
graph2.assign(number_of_groups, vector<int>(0));
memo.assign(number_of_groups, -1);
for (int i=1; i <= n; i++) {
for (int next : graph[i]) {
if (group[i] != group[next]) {
graph2[group[i]].push_back(group[next]);
}
}
}
int max_group = 0;
for (int g = 1; g < number_of_groups; g++) {
if (memo[g] == -1) {
dfs2(g);
}
if (memo[g] > memo[max_group]) {
max_group = g;
}
}
cout << group_nodes[max_group][0] << ' ' << memo[max_group] << '\n';
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| subtask2 | 20/20 | ||||||
| 2 | Accepted | 3ms | 564 KiB | ||||
| 3 | Accepted | 3ms | 764 KiB | ||||
| 4 | Accepted | 3ms | 564 KiB | ||||
| 5 | Accepted | 2ms | 748 KiB | ||||
| 6 | Accepted | 3ms | 564 KiB | ||||
| 7 | Accepted | 2ms | 564 KiB | ||||
| 8 | Accepted | 3ms | 808 KiB | ||||
| 9 | Accepted | 3ms | 820 KiB | ||||
| 10 | Accepted | 2ms | 564 KiB | ||||
| 11 | Accepted | 3ms | 756 KiB | ||||
| 12 | Accepted | 3ms | 564 KiB | ||||
| subtask3 | 18/18 | ||||||
| 13 | Accepted | 335ms | 25332 KiB | ||||
| 14 | Accepted | 300ms | 24748 KiB | ||||
| 15 | Accepted | 261ms | 24964 KiB | ||||
| 16 | Accepted | 264ms | 25680 KiB | ||||
| 17 | Accepted | 261ms | 29608 KiB | ||||
| 18 | Accepted | 351ms | 29112 KiB | ||||
| 19 | Accepted | 356ms | 29100 KiB | ||||
| 20 | Accepted | 275ms | 29100 KiB | ||||
| 21 | Accepted | 268ms | 35756 KiB | ||||
| 22 | Accepted | 250ms | 37928 KiB | ||||
| subtask4 | 42/42 | ||||||
| 23 | Accepted | 1ms | 316 KiB | ||||
| 24 | Accepted | 3ms | 564 KiB | ||||
| 25 | Accepted | 3ms | 764 KiB | ||||
| 26 | Accepted | 3ms | 564 KiB | ||||
| 27 | Accepted | 2ms | 748 KiB | ||||
| 28 | Accepted | 3ms | 564 KiB | ||||
| 29 | Accepted | 2ms | 564 KiB | ||||
| 30 | Accepted | 3ms | 808 KiB | ||||
| 31 | Accepted | 3ms | 820 KiB | ||||
| 32 | Accepted | 2ms | 564 KiB | ||||
| 33 | Accepted | 3ms | 756 KiB | ||||
| 34 | Accepted | 3ms | 564 KiB | ||||
| 35 | Accepted | 335ms | 25332 KiB | ||||
| 36 | Accepted | 300ms | 24748 KiB | ||||
| 37 | Accepted | 261ms | 24964 KiB | ||||
| 38 | Accepted | 264ms | 25680 KiB | ||||
| 39 | Accepted | 261ms | 29608 KiB | ||||
| 40 | Accepted | 351ms | 29112 KiB | ||||
| 41 | Accepted | 356ms | 29100 KiB | ||||
| 42 | Accepted | 275ms | 29100 KiB | ||||
| 43 | Accepted | 268ms | 35756 KiB | ||||
| 44 | Accepted | 250ms | 37928 KiB | ||||
| 45 | Accepted | 358ms | 36000 KiB | ||||
| 46 | Accepted | 284ms | 37272 KiB | ||||
| 47 | Accepted | 286ms | 37552 KiB | ||||
| 48 | Accepted | 361ms | 37788 KiB | ||||
| 49 | Accepted | 286ms | 38304 KiB | ||||
| 50 | Accepted | 291ms | 39312 KiB | ||||
| 51 | Accepted | 379ms | 39576 KiB | ||||
| 52 | Accepted | 391ms | 39832 KiB | ||||
| 53 | Accepted | 293ms | 40348 KiB | ||||
| 54 | Accepted | 289ms | 41628 KiB | ||||