#include <bits/stdc++.h>
using namespace std;
#define int long long
int n;
const int mxN = 10000;
vector<vector<int>> adj, adj2, adj3;
vector<bool> vis;
vector<int> topOrd, num, num2, maxs;
int cnt = 1;
void dfs(int v) {
vis[v] = 1;
for(int u : adj[v]) {
if(!vis[u]) {
dfs(u);
}
}
topOrd.push_back(v);
}
void dfs2(int v) {
vis[v] = 1;
num[v] = cnt;
num2[cnt]++;
for(int u : adj2[v]) {
if(!vis[u]) {
dfs2(u);
}
}
}
void dfs3(int v) {
vis[v] = 1;
int sum = 0;
for(int u : adj3[v]) {
if(!vis[u]) {
dfs3(u);
}
sum += maxs[u];
}
maxs[v] = sum + num2[v];
}
signed main() {
cin >> n;
adj.assign(n+1, {});
adj2.assign(n+1, {});
adj3.assign(n+1, {});
vis.assign(n+1, 0);
num.assign(n+1, -1);
num2.assign(n+1, 0);
for(int i = 1; i <= n; i++) {
int x;
cin >> x;
adj2[x].push_back(i);
adj[i].push_back(x);
//cout << i << ' ' << x << endl;
}
for(int i = 1; i <= n; i++) {
if (!vis[i]) {
dfs(i);
}
}
reverse(topOrd.begin(), topOrd.end());
vis.assign(n+1, 0);
for(int x : topOrd) {
//cout << x << ' ';
if(!vis[x]) {
dfs2(x);
cnt++;
}
}
//cout << endl;
cnt--;
//for(int i = 1; i <= n; i++) cout <<num[i] << " " << i << endl;
//cout << endl;
//cout << endl;
for(int i = 1; i <= n; i++) {
if (num[adj[i][0]] != num[i]) {
adj3[num[i]].push_back(num[adj[i][0]]);
//cout << num[i] << " --> " << num[adj[i][0]] << " " << i << " --> " << adj[i][0] << endl;
}
}
vis.assign(cnt+1, 0);
maxs.assign(cnt+1, 0);
for(int i = 1; i <= cnt; i++) {
if(!vis[i]) {
dfs3(i);
}
}
int maxx = 0;
int maxind;
for(int i = 1; i <= cnt; i++) {
if (maxx < maxs[i]) {
maxx = maxs[i];
maxind = i;
}
}
for(int i = 1; i <= n; i++) {
if (num[i] == maxind) {
cout << i << ' ' << maxx << endl;
return 0;
}
}
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| subtask2 | 20/20 | ||||||
| 2 | Accepted | 3ms | 564 KiB | ||||
| 3 | Accepted | 2ms | 752 KiB | ||||
| 4 | Accepted | 3ms | 564 KiB | ||||
| 5 | Accepted | 3ms | 564 KiB | ||||
| 6 | Accepted | 2ms | 564 KiB | ||||
| 7 | Accepted | 2ms | 564 KiB | ||||
| 8 | Accepted | 2ms | 568 KiB | ||||
| 9 | Accepted | 2ms | 564 KiB | ||||
| 10 | Accepted | 2ms | 564 KiB | ||||
| 11 | Accepted | 2ms | 632 KiB | ||||
| 12 | Accepted | 2ms | 564 KiB | ||||
| subtask3 | 18/18 | ||||||
| 13 | Accepted | 236ms | 32172 KiB | ||||
| 14 | Accepted | 317ms | 32296 KiB | ||||
| 15 | Accepted | 239ms | 32684 KiB | ||||
| 16 | Accepted | 317ms | 33144 KiB | ||||
| 17 | Accepted | 324ms | 36008 KiB | ||||
| 18 | Accepted | 243ms | 36520 KiB | ||||
| 19 | Accepted | 250ms | 36524 KiB | ||||
| 20 | Accepted | 323ms | 36516 KiB | ||||
| 21 | Accepted | 245ms | 42464 KiB | ||||
| 22 | Accepted | 248ms | 44716 KiB | ||||
| subtask4 | 42/42 | ||||||
| 23 | Accepted | 1ms | 500 KiB | ||||
| 24 | Accepted | 3ms | 564 KiB | ||||
| 25 | Accepted | 2ms | 752 KiB | ||||
| 26 | Accepted | 3ms | 564 KiB | ||||
| 27 | Accepted | 3ms | 564 KiB | ||||
| 28 | Accepted | 2ms | 564 KiB | ||||
| 29 | Accepted | 2ms | 564 KiB | ||||
| 30 | Accepted | 2ms | 568 KiB | ||||
| 31 | Accepted | 2ms | 564 KiB | ||||
| 32 | Accepted | 2ms | 564 KiB | ||||
| 33 | Accepted | 2ms | 632 KiB | ||||
| 34 | Accepted | 2ms | 564 KiB | ||||
| 35 | Accepted | 236ms | 32172 KiB | ||||
| 36 | Accepted | 317ms | 32296 KiB | ||||
| 37 | Accepted | 239ms | 32684 KiB | ||||
| 38 | Accepted | 317ms | 33144 KiB | ||||
| 39 | Accepted | 324ms | 36008 KiB | ||||
| 40 | Accepted | 243ms | 36520 KiB | ||||
| 41 | Accepted | 250ms | 36524 KiB | ||||
| 42 | Accepted | 323ms | 36516 KiB | ||||
| 43 | Accepted | 245ms | 42464 KiB | ||||
| 44 | Accepted | 248ms | 44716 KiB | ||||
| 45 | Accepted | 291ms | 34212 KiB | ||||
| 46 | Accepted | 238ms | 34888 KiB | ||||
| 47 | Accepted | 244ms | 34920 KiB | ||||
| 48 | Accepted | 305ms | 35240 KiB | ||||
| 49 | Accepted | 300ms | 35752 KiB | ||||
| 50 | Accepted | 237ms | 36636 KiB | ||||
| 51 | Accepted | 321ms | 37036 KiB | ||||
| 52 | Accepted | 246ms | 37200 KiB | ||||
| 53 | Accepted | 289ms | 37800 KiB | ||||
| 54 | Accepted | 225ms | 39080 KiB | ||||