Submission #1068577

#TimeUsernameProblemLanguageResultExecution timeMemory
1068577parsadox2Beech Tree (IOI23_beechtree)C++17
5 / 100
65 ms34248 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;
int n , col[N] , m , sbt[N] , is_path[N] , cnt[N];
vector <int> adj[N];
vector <int> all , p;

void Dfs(int v)
{
    sbt[v] = 1;
    for(auto u : adj[v])
    {
        Dfs(u);
        sbt[v] += sbt[u];
    }
    if(adj[v].size() == 1)
    {
        int c = adj[v][0];
        if(sbt[c] == 1)
            is_path[v] = col[c];
        else if(col[c] == is_path[c])
            is_path[v] = col[c];
        else
            is_path[v] = -1;
    }
    else if(adj[v].size() > 1)
    {
        is_path[v] = -1;
    }
}

void Dfs_all(int v)
{
    all.push_back(v);
    cnt[col[v]] = 0;
    for(auto u : adj[v])
        Dfs_all(u);
}

bool Solve(int v)
{
    all.clear();
    Dfs_all(v);
    sort(all.begin() , all.end());
    bool flg = false;
    do{
        for(auto u : all)
            cnt[col[u]] = 0;
        bool tmp = true;
        for(int i = 1 ; i < all.size() ; i++)
        {
            if(all[cnt[col[all[i]]]] != p[all[i]])
                tmp = false;
            cnt[col[all[i]]]++;
        }
        flg |= tmp;
    }while(next_permutation(all.begin() , all.end()));
    return flg;
}

vector<int> beechtree(int nn, int mm, vector<int> P, vector<int> C)
{
    n = nn;  
    m = mm;
    p = P;
    for(int i = 1 ; i < n ; i++)
    {
        adj[P[i]].push_back(i);
        col[i] = C[i];
    }
    Dfs(0);
    vector <int> res(n , 0);
    for(int i = 0 ; i < n ; i++)
    {
        if(is_path[i] != -1)
        {
            res[i] = true;
            continue;
        }
        //res[i] = Solve(i);
    }
    return res;
}

Compilation message (stderr)

beechtree.cpp: In function 'bool Solve(int)':
beechtree.cpp:53:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |         for(int i = 1 ; i < all.size() ; i++)
      |                         ~~^~~~~~~~~~~~
#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...