Submission #37591

#TimeUsernameProblemLanguageResultExecution timeMemory
37591grumpy_gordonAmusement Park (JOI17_amusement_park)C++14
0 / 100
16 ms19024 KiB
#include <bits/stdc++.h> #include "Joi.h" using namespace std; const int maxn = 1e5 + 100; vector<int> e[maxn]; int n; int parent[maxn]; int h[maxn]; int get(int x){ return x == parent[x] ? x : parent[x] = get(parent[x]); } bool uni(int x, int y){ x = get(x); y = get(y); if (x == y) return 0; parent[x] = y; return 1; } int poi[maxn]; void predfs(int v, int par){ for (auto i : e[v]) if (i != par) poi[i] = v, h[i] = h[v] + 1, predfs(i, v); } pair<int, int> mas[maxn]; vector<int> q[maxn]; int pos[maxn]; bool good[maxn]; void make(int v, int par, int st){ q[st].push_back(v); for (auto i : e[v]) if (i != par && good[i]) make(i, v, st); } void Joi(int N, int M, int A[], int B[], long long X, int T){ n = N; for (int i = 0; i < n; i++) parent[i] = i; for (int i = 0; i < M; i++) if (uni(A[i], B[i])){ e[A[i]].push_back(B[i]); e[B[i]].push_back(A[i]); } predfs(0, -1); for (int i = 0; i < n; i++) mas[i] = make_pair(h[i], i); sort(mas, mas + n); for (int i = 0; i < 60; i++) good[mas[i].second] = 1, pos[mas[i].second] = i; for (int i = 0; i < 60; i++) make(mas[i].second, -1, mas[i].second); for (int i = 60; i < n; i++){ int v = poi[i]; q[i] = q[v]; pos[i] = pos[q[i].back()]; q[i].pop_back(); q[i].insert(q[i].begin(), i); } for (int i = 0; i < n; i++) MessageBoard(i, (1ll << pos[i]) & X > 0); }
#include <bits/stdc++.h> #include "Ioi.h" using namespace std; const int maxn = 1e5 + 100; vector<int> e[maxn]; int n; int parent[maxn]; int h[maxn]; int get(int x){ return x == parent[x] ? x : parent[x] = get(parent[x]); } bool uni(int x, int y){ x = get(x); y = get(y); if (x == y) return 0; parent[x] = y; return 1; } int poi[maxn]; void predfs(int v, int par){ for (auto i : e[v]) if (i != par) poi[i] = v, h[i] = h[v] + 1, predfs(i, v); } pair<int, int> mas[maxn]; vector<int> q[maxn]; int pos[maxn]; bool good[maxn]; void make(int v, int par, int st){ q[st].push_back(v); for (auto i : e[v]) if (i != par && good[i]) make(i, v, st); } long long ans; void go(int v, int par, vector<int> &g, int id, int val){ ans += (1ll << pos[v]) * val; if (id < 60){ for (auto i : e[v]) if (i == g[id]) go(i, v, g, id + 1, Move(i)); } if (par != -1) Move(par); } long long Ioi(int N, int M, int A[], int B[], int P, int V, int T){ n = N; for (int i = 0; i < n; i++) parent[i] = i; for (int i = 0; i < M; i++) if (uni(A[i], B[i])){ e[A[i]].push_back(B[i]); e[B[i]].push_back(A[i]); } predfs(0, -1); for (int i = 0; i < n; i++) mas[i] = make_pair(h[i], i); sort(mas, mas + n); for (int i = 0; i < 60; i++) good[mas[i].second] = 1, pos[mas[i].second] = i; for (int i = 0; i < 60; i++) make(mas[i].second, -1, mas[i].second); for (int i = 60; i < n; i++){ int v = poi[i]; q[i] = q[v]; pos[i] = pos[q[i].back()]; q[i].pop_back(); q[i].insert(q[i].begin(), i); } go(P, -1, q[P], 1, V); return ans; }

Compilation message (stderr)

Joi.cpp: In function 'void Joi(int, int, int*, int*, long long int, int)':
Joi.cpp:76:43: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
       MessageBoard(i, (1ll << pos[i]) & X > 0);
                                           ^
#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...