Submission #1042606

#TimeUsernameProblemLanguageResultExecution timeMemory
1042606idasSplit the Attractions (IOI19_split)C++17
0 / 100
21 ms7040 KiB
#include "split.h" #include <bits/stdc++.h> #define FOR(i, begin, end) for(int i=(begin); i<(end); i++) #define pb push_back using namespace std; typedef vector<int> vi; const int MxN=1e5+10; int n, m, dp[MxN], s[3]; vi ad[MxN]; void pre(int u, int pst=-1) { dp[u]=1; for(auto it : ad[u]) { if(it==pst) continue; pre(it, u); dp[u]+=dp[it]; } } int x=-1, y=-1; void dfs(int u, int pst=-1, int up=0) { if(up>=s[0] && dp[u]>=s[1]) { x=pst; y=u; } else if(up>=s[1] && dp[u]>=s[0]) { x=u; y=pst; } for(auto it : ad[u]) { if(it==pst) continue; dfs(it, u, up+dp[u]-dp[it]); } } vi ans; void spread(int u, int in, int pst=-1) { s[in]--; ans[u]=in+1; // cout << u << " -> " << in << endl; if(s[in]==0) return; // cout << pst << "\n"; // for(auto it : ad[5]){ // cout << it << " "; // } // cout << endl; for(auto it : ad[u]) { if(it==pst) continue; spread(it, in, u); if(s[in]==0) return; } } vector<int> find_split(int N, int a, int b, int c, vector<int> p, vector<int> q) { n=N; m=p.size(); vi ans(n); FOR(i, 0, a) ans[i]=1; FOR(i, a, a+b) ans[i]=2; FOR(i, a+b, a+b+c) ans[i]=3; // vi tmp; tmp.pb(a); tmp.pb(b); tmp.pb(c); // //sort(tmp.begin(), tmp.end()); // FOR(z, 0, 3) s[z]=tmp[z]; // // FOR(i, 0, m) { // ad[p[i]].pb(q[i]); // ad[q[i]].pb(p[i]); // } // pre(0); // dfs(0); // // FOR(i, 0, n) ans.pb(0); // if(x==-1) return ans; // // FOR(i, 0, n) ans[i]=3; // // spread(x, 0, y); // spread(y, 1, x); // //// cout << x << " " << y << ": " << rev << endl; //// cout << s[0] << " " << s[1] << endl; return ans; }
#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...