Submission #297853

#TimeUsernameProblemLanguageResultExecution timeMemory
297853juggernautSplit the Attractions (IOI19_split)C++14
0 / 100
699 ms1048580 KiB
#include<bits/stdc++.h>
#include"split.h"
using namespace std;
vector<int>g[100005];
pair<int,int>p[3];
int sz[100005],n,ans[100005];
int calc(int v,int p){
    sz[v]=1;
    for(int to:g[v])if(to!=p)sz[v]+=calc(to,v);
    return sz[v];
}
int dfs(int v,int p){
    for(int to:g[v])if(to!=p)
        if(sz[to]>(n>>1))return dfs(to,v);
    return v;
}
bool cmp(int l,int r){
    return sz[l]>sz[r];
}
vector<int>zero(int n){
    vector<int>ans;
    while(n--)ans.push_back(0);
    return ans;
}
void go(int v,int p,int cnt,int val){
    ans[v]=val;
    cnt--;
    if(!cnt)return;
    for(int to:g[v])if(to!=p)
        go(to,v,cnt,val);
}
vector<int>find_split(int N,int a,int b,int c,vector<int>p1,vector<int>p2){
    n=N;
    p[0]={a,1};
    p[1]={b,2};
    p[2]={c,3};
    sort(p,p+3);
    for(int i=0;i<p1.size();i++){
        g[p1[i]].push_back(p2[i]);
        g[p2[i]].push_back(p1[i]);
    }
    calc(1,-1);
    int root=dfs(1,-1);
    calc(root,-1);
    sort(g[root].begin(),g[root].end(),cmp);
    if(sz[g[root][0]]<p[0].first)return zero(n);
    go(g[root][0],root,p[0].first,p[0].second);
    p[1].first--;
    ans[root]=p[1].second;
    if(p[1].first)go(g[root][1],root,p[1].first,p[1].second);
    vector<int>ans;
    for(int i=0;i<n;i++){
        if(!ans[i])ans[i]=p[2].second;
        ans.push_back(ans[i]);
    }
    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:38:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for(int i=0;i<p1.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...