Submission #297865

#TimeUsernameProblemLanguageResultExecution timeMemory
297865juggernautSplit the Attractions (IOI19_split)C++14
0 / 100
685 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){ if(!cnt)return; ans[v]=val; cnt--; 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; go(g[root][1],root,p[1].first,p[1].second); vector<int>vec; for(int i=0;i<n;i++){ if(!ans[i])ans[i]=p[2].second; vec.push_back(ans[i]); } return vec; }

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...