Submission #1047667

#TimeUsernameProblemLanguageResultExecution timeMemory
1047667vjudge1Split the Attractions (IOI19_split)C++17
0 / 100
56 ms20380 KiB
#include "split.h" #include <bits/stdc++.h> using namespace std; #define sp " " #define endl "\n" #define pb push_back #define pii pair<int, int> #define st first #define nd second #define fileio() freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout) #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define LL node * 2 #define RR node * 2 + 1 #define ll long long #define MAXN 200005 vector<int> adj[MAXN]; vector<int> child[MAXN]; int res[MAXN], vis[MAXN], vis2[MAXN], sz[MAXN], P[MAXN], deg[MAXN]; void color(int node, int &cnt, int c){ if (cnt <= 0) return; //cout<<node<<sp<<c<<endl; res[node] = c; cnt--; for (auto i : child[node]){ color(i, cnt, c); } } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { for (int i = 0; i < p.size(); i++) adj[p[i]].pb(q[i]), adj[q[i]].pb(p[i]), deg[p[i]]++, deg[q[i]]++; for (int i = 0; i < n; i++) sz[i] = 1; vector<pii> v = {{a, 1}, {b, 2}, {c, 3}}; sort(v.rbegin(), v.rend()); priority_queue<pii> Q; for (int i = 0; i < n; i++) if (adj[i].size() == 1) Q.push({-1, i}); vector<int> todo; int root = -1; int last = -1; while(!Q.empty()){ int top = Q.top().nd; Q.pop(); last = top; for (auto i : adj[top]){ if (vis2[i]) continue; P[top] = i; } if (sz[top] >= v.back().st && root == -1){ root = top; } else{ child[P[top]].pb(top); sz[P[top]] += sz[top]; } deg[P[top]]--; vis2[top] = 1; if (deg[P[top]] == 1) Q.push({-sz[P[top]], P[top]}); } vector<int> ans(n, 0); if (root == -1 || n - sz[root] < v[1].st) return ans; for (int i = 0; i < n; i++) res[i] = v[0].nd; color(root, v[2].st, v[2].nd); color(last, v[1].st, v[1].nd); for (int i = 0; i < n; i++) ans[i] = res[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:34:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |  for (int i = 0; i < p.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...