Submission #1364770

#TimeUsernameProblemLanguageResultExecution timeMemory
1364770AzeTurk8109월 (APIO24_september)C++20
45 / 100
80 ms9316 KiB
/*
Telebe of Adicto && Mamedov yani AzeTurk810
I see humans but no humanity
*/
#include "september.h"
#include <algorithm>
#include <cassert>
#include <functional>
#include <iostream>
#include <vector>

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

using ll = long long;
using namespace std;

#define ln '\n'
#define INFi 1e9
#define INFll 1e18

#ifdef ONPC
#include <algo.hpp>
#else
#define dbg(...)
#define dbg_out(...)
#define myassert(Expr, Msg) ;
#endif

size_t _n, _m;
vector<int> pa, ind;
vector<char> used;
vector<vector<int>> S, adj;
ll ans = -1;

inline void systemd() {
    used.assign(_n, false);
    adj.assign(_n, vector<int>(0));
    for (int i = 1; i < _n; i++) {
        adj[pa[i]].push_back(i);
        adj[i].push_back(pa[i]);
    }
    ind.assign(_n, 0);
    ans = -1;
}

void solve1() {
    function<int(int)> dfs = [&](int v) {
        if (used[v])
            return ind[v];
        used[v] = true;
        int res = ind[v];
        for (const auto &u : adj[v]) {
            if (pa[v] == u || used[u])
                continue;
            res = max(dfs(u), res);
        }
        return res;
    };
    myassert(S.size() == 1, "INPUT IS WRONG: S.size() is not one at _m == 1");
    for (size_t i = 0; i < S[0].size(); i++) {
        ind[S[0][i]] = i;
    }
    ans = 0;
    for (size_t i = 0; i < S[0].size(); ) {
        const int &v = S[0][i];
        if (used[v]) {
            i++;
            continue;
        }
        ans++;
        int j = dfs(v);
        if (i >= j) {
            i++;
            continue;
        } else {
            for (int k = i + 1; k < j; k++) {
                dbg(j);
                j = max(j, dfs(S[0][k]));
            }
        }
    }
    myassert(!used[0], "WA: root is used");
}

char solve() {
    return 0;
}

// Attack on titan<3

int solve(int N, int M, std::vector<int> __pa, std::vector<std::vector<int>> __S) {
    _n = N, _m = M;
    pa = __pa;
    S = __S;
    systemd();
    if (M == 1) {
        solve1();
        myassert(ans >= 1, "WA: Answer must be greater than 0");
        return ans;
    }
    solve();
    myassert(ans >= 1, "WA: Answer must be greater than 0");
    return ans;
}
// Just Imaginary
/*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠀⠀⠀⢀⣴⣾⠀⠀⠀⡀⢀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣦⣾⣿⣿⣿⣿⣿⡆⠁⠀⢀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⡠⠂⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠠⠔⠚⣿⣿⣿⣿⣿⣦⡄⠀⠁⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⠠⠐⢂⠉⡀⣀⣤⣄⢻⣿⣿⡟⢈⡹⣿⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⡀⠄⠂⠈⠀⣶⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠘⣷⡀⠀⡀⠐⠂⠐⢄
⠀⠀⠀⠀⠀⠀⠀⣿⣿⠟⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣀⣾⣷⠯⠀⠤⠤⠄⠈
⠀⠀⠀⠀⠀⠀⣼⣿⡟⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⢠⣾⣿⣿⣿⣿⣿⣭⠟⢻⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀
⠀⠀⠀⣀⣶⡟⠁⠀⢾⣶⣿⠟⠉⠈⢻⣿⣿⣿⣦⣜⠀⠛⠛⠿⠁⠀⠀⠀⠀⠀
⠚⠻⠿⠿⡿⠁⠀⢠⣿⣿⠁⠀⣠⠖⠋⠉⠻⣿⣿⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣰⣿⡿⠃⠠⠊⠁⠀⠀⠀⠀⠈⢿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⣴⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣠⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢀⣴⠾⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...