Submission #981025

#TimeUsernameProblemLanguageResultExecution timeMemory
981025vjudge1Beech Tree (IOI23_beechtree)C++17
14 / 100
75 ms16836 KiB
#include "beechtree.h"
using namespace std;
#define pb push_back
#include<bits/stdc++.h>
#define deb(x) cout<<#x<<": "<<x<<endl;
bool DFS (int N, vector<vector<int>> &sons,vector<int> &P, vector<int> &C){
    if(sons[N].size()==0) return true;
    vector<int> st;
    st.pb(N);
    queue<int> q;
    for(int x: sons[N]){
        q.push(x);
    }
    while(!q.empty()){
        int x=q.front();
        q.pop();
        st.pb(x);
        for(int a:sons[x]){
            q.push(a);
        }
    }

    sort(st.begin(), st.end());
    do{
   
        vector<int> colors;
        //colors.pb(C[st[0]]);
        bool works=true;
        for(int i=1; i<st.size(); ++i){ 
            int cont=0;
            for(int x: colors){
                if(x==C[st[i]]){
                    cont++;
                }
            }
            if(st[cont]!=P[st[i]]){
                works=false;
                break;
            }
            colors.pb(C[st[i]]);
        }
        if(works){
            return true;
        }
    }while(next_permutation(st.begin()+1, st.end()));
    return false;

}

vector<int> beechtree(int N, int M, vector<int> P, vector<int> C)
{
    vector<vector<int>> sons (N);
    for(int i=1;i<N; ++i){
        sons[P[i]].pb(i);
    }
    if(N<=8){
    vector<int> ans (N,0);
    
    for(int i=0; i<N; ++i){
        if(DFS(i, sons, P, C)){
            ans[i]=1;
        }
    }
    return ans;
    }
    
    reverse(C.begin(), C.end());
    vector<int> ans (N, 0);
    ans[N-1]=1;
    int col=C[0];
    for(int i=0; i<N; ++i){
        if(C[i]==col){
            ans[N-i-2]=1;
        }
        else{
            break;
        }
    }
    return ans;



    return {};
}

Compilation message (stderr)

beechtree.cpp: In function 'bool DFS(int, std::vector<std::vector<int> >&, std::vector<int>&, std::vector<int>&)':
beechtree.cpp:29:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |         for(int i=1; i<st.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...