60 2021. 01. 09 16:08:48 mraron Színes fa cpp11 Elfogadva 50/50 104ms 45072 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/priority_queue.hpp>
//#pragma GCC optimize("O3")
//#pragma GCC target("sse4")
//#pragma GCC target("avx2")
 
#define deb(x) cout << #x << " = " << x << "\n"
#define all(x) (x).begin(), (x).end()
#define len(x) (int) x.size()
#define lsb(x) (x) & -(x)
#define l(x) (x << 1) + 1
#define r(x) (x << 1) + 2
#define v(x) (int)(x - 'a')
 
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
 
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ld, ld> pld;
typedef pair <ll, ll> pll;
 
template <class T1, class T2 = less <T1>> using pb_heap = __gnu_pbds::priority_queue <T1, T2, binary_heap_tag>;
template <class T1, class T2 = null_type, class T3 = less <T1>> using pb_map = tree <T1, T2, T3, rb_tree_tag, tree_order_statistics_node_update>;
template <class T1, class T2 = null_type, class T3 = hash <T1>> using pb_umap = gp_hash_table <T1, T2, T3>;
template <class T1, class T2, class T3 = hash <T1>> using umap = unordered_map <T1, T2, T3>;
template <class T> using uset = unordered_set <T>;
template <class T> using vec = vector <T>;
 
const ll infll = numeric_limits <ll>::max() >> 1;
const int inf = numeric_limits <int>::max() >> 1;
const int N = 2e5 + 1;
int n;

struct Graph {
     int dep[N];
     vec <int> adj[N];
} graph;

void input() 
{
     cin >> n;
     for (int i = 2; i <= n; ++i) {
          int p; cin >> p;
          graph.adj[p].pb(i);
     }
}

int dfs(int u, int h = 1)
{
     graph.dep[u] = h;
     int res = inf;
     for (int v: graph.adj[u]) {
          res = min(res, dfs(v, h + 1));
     }
     if (graph.adj[u].empty()) {
          res = min(res, h);
     }
     return res;
}

void solve()
{
     int ans = dfs(1);
     cout << ans << "\n";
     for (int i = 1; i <= n; ++i) {
          cout << min(ans, graph.dep[i]) << " ";
     }
     cout << "\n";
}

int main() 
{
     ios_base::sync_with_stdio(false);
     cin.tie(0), cout.tie(0);
     input();
     solve();
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 7ms 11196 KiB
2 Elfogadva 0/0 8ms 12052 KiB
3 Elfogadva 1/1 4ms 11452 KiB
4 Elfogadva 4/4 6ms 11712 KiB
5 Elfogadva 5/5 68ms 45072 KiB
6 Elfogadva 2/2 79ms 21784 KiB
7 Elfogadva 3/3 79ms 21808 KiB
8 Elfogadva 2/2 76ms 21256 KiB
9 Elfogadva 2/2 71ms 20452 KiB
10 Elfogadva 2/2 74ms 21144 KiB
11 Elfogadva 2/2 79ms 23528 KiB
12 Elfogadva 2/2 83ms 24896 KiB
13 Elfogadva 2/2 86ms 25484 KiB
14 Elfogadva 2/2 87ms 25980 KiB
15 Elfogadva 2/2 89ms 26484 KiB
16 Elfogadva 2/2 89ms 26544 KiB
17 Elfogadva 2/2 90ms 26864 KiB
18 Elfogadva 2/2 101ms 27136 KiB
19 Elfogadva 2/2 92ms 27208 KiB
20 Elfogadva 2/2 104ms 27548 KiB
21 Elfogadva 2/2 92ms 27904 KiB
22 Elfogadva 2/2 93ms 28364 KiB
23 Elfogadva 2/2 97ms 32124 KiB
24 Elfogadva 3/3 101ms 36888 KiB