Submission #1001420

#TimeUsernameProblemLanguageResultExecution timeMemory
1001420irmuunSplit the Attractions (IOI19_split)C++17
22 / 100
567 ms1048576 KiB
#include<bits/stdc++.h>
#include "split.h"

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

const int N=1e5+5;

int cur=0;
vector<int>adj[N],ord,sub(N,0),v[2],par(N,0);
vector<bool>used(N,0);
void dfs(int x){
    used[x]=true;
    sub[x]=1;
    ord.pb(x);
    for(int y:adj[x]){
        if(!used[y]){
            par[y]=x;
            dfs(y);
            sub[x]+=sub[y];
        }
    }
}
void dfs2(int x,int p){
    v[cur].pb(x);
    for(int y:adj[x]){
        if(y!=p){
            dfs2(y,x);
        }
    }
}

vector<int>find_split(int n, int a, int b, int c, vector<int>p, vector<int>q){
    int m=p.size();
    for(int i=0;i<m;i++){
        adj[p[i]].pb(q[i]);
        adj[q[i]].pb(p[i]);
    }
    vector<pair<int,int>>s(3);
    s[0]={a,1};
    s[1]={b,2};
    s[2]={c,3};
    sort(all(s));
    dfs(0);
    bool ok=false;
    vector<int>ans(n,0);
    for(int i=1;i<n;i++){
        if(sub[i]>=s[0].ff&&n-sub[i]>=s[1].ff){
            cur=0;
            dfs2(i,par[i]);
            cur=1;
            dfs2(par[i],i);
            break;
        }
        if(sub[i]>=s[1].ff&&n-sub[i]>=s[0].ff){
            cur=1;
            dfs2(i,par[i]);
            cur=0;
            dfs2(par[i],i);
            break;
        }
    }
    if(v[0].empty()){
        return ans;
    }
    for(int i=0;i<s[0].ff;i++){
        ans[v[0][i]]=s[0].ss;
    }
    for(int i=0;i<s[1].ff;i++){
        ans[v[1][i]]=s[1].ss;
    }
    for(int i=0;i<n;i++){
        if(ans[i]==0){
            ans[i]=3;
        }
    }
    return ans;
}

Compilation message (stderr)

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:51:10: warning: unused variable 'ok' [-Wunused-variable]
   51 |     bool ok=false;
      |          ^~
#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...