Submission #1153602

#TimeUsernameProblemLanguageResultExecution timeMemory
1153602lrnnzSeptember (APIO24_september)C++17
0 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
 
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)(a).size()
#define pb push_back
#define ll long long
#define ui uint64_t
#define ar array
#define us unordered_set
#define cont(set, element) ((set).find(element) != (set).end())
 
/********* DEBUG *********/
 
template <typename T>
void outvec(const vector<T>& Z){
    for (const T& x : Z)
    cout << x << ' ';
    cout << "\n";
}
 
/********* DEBUG *********/
 
const int MOD = 1e9+7;
const int mxN = 200005;
const ll inf = 1e18;

void dfs(int node, vector<vector<int>> &children, vector<bool> &visited, int &cnt){
    if (visited[node])
    return;

    visited[node] = true;
    cnt++;
    for (auto x : children[node])
        if (!visited[x])
        dfs(x, children, visited, cnt);
}

int solve(int N, int M, vector<int> F, vector<vector<int>> S){
    vector<vector<int>> children(N, vector<int>());
    for (int i = 1; i < sz(F); i++){
        children[F[i]].pb(i);
    }

    int ans = 0;
    int diffs = 0;
    int minleaf = 0;

    map<int,int> cnts;
    vector<bool> visited(N, false);

    for (int i = N-2; i >= 0; i--){
        for (auto x : S){
            int node = x[i];

            if (!visited[node]){
                dfs(node, children, visited, minleaf);
            }

            cnts[node]++;
            if (cnts[node] == 1){
                diffs++;
            }

            if (cnts[node] == M){
                diffs--;
            }
        }
        if (N-1-i >= minleaf && diffs == 0)
        ans++;
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...