Submission #130617

#TimeUsernameProblemLanguageResultExecution timeMemory
130617RezwanArefin01Amusement Park (JOI17_amusement_park)C++17
100 / 100
119 ms35928 KiB
#include <bits/stdc++.h> #include "Joi.h" using namespace std; static const int N = 10010; static const int B = 60; static vector<int> adj[N], g[N]; static bitset<N> st[N]; static int vis[N], bit[N], p[N], comp[N], cnt, idx, deg[N]; void gen(int u) { vis[u] = 1; for(int v : g[u]) if(!vis[v]) { adj[u].push_back(v); adj[v].push_back(u); p[v] = u; gen(v); } } void mark(int u, int par = -1) { ++cnt; st[0][u] = 1; comp[u] = 0; bit[u] = cnt - 1; for(int v : adj[u]) if(v != par) { if(cnt < B) mark(v, u); else break; } } void dfs(int u, int par = -1) { int leaf = -1; bitset<N> &S = st[comp[u]]; vector<int> nodes; for(int i = S._Find_first(); i < S.size(); i = S._Find_next(i)) deg[i] = 0, nodes.push_back(i); for(int v : nodes) { if(!v) continue; if(S[p[v]]) { ++deg[p[v]]; ++deg[v]; } } for(int v : nodes) { if(deg[v] == 1 && v != u) { leaf = v; break; } } for(int v : adj[u]) if(v != par) { if(comp[v] == -1) { comp[v] = ++idx; st[idx] = st[comp[u]]; bit[v] = bit[leaf]; st[idx][leaf] = 0; st[idx][v] = 1; } dfs(v, u); } } void Build(int n, int m, int A[], int B[]) { for(int i = 0; i < m; ++i) { g[A[i]].push_back(B[i]); g[B[i]].push_back(A[i]); } memset(comp, -1, sizeof comp); gen(0); mark(0); dfs(0); } void Joi(int n, int m, int A[], int B[], long long X, int T) { Build(n, m, A, B); for(int i = 0; i < n; ++i) { MessageBoard(i, X >> bit[i] & 1); } }
#include <bits/stdc++.h> #include "Ioi.h" using namespace std; using namespace std; static const int N = 10010; static const int B = 60; static vector<int> adj[N], g[N]; static bitset<N> st[N]; static int vis[N], bit[N], p[N], comp[N], cnt, idx, deg[N]; void gen(int u) { vis[u] = 1; for(int v : g[u]) if(!vis[v]) { adj[u].push_back(v); adj[v].push_back(u); p[v] = u; gen(v); } } void mark(int u, int par = -1) { ++cnt; st[0][u] = 1; comp[u] = 0; bit[u] = cnt - 1; for(int v : adj[u]) if(v != par) { if(cnt < B) mark(v, u); else break; } } void dfs(int u, int par = -1) { int leaf = -1; bitset<N> &S = st[comp[u]]; vector<int> nodes; for(int i = S._Find_first(); i < S.size(); i = S._Find_next(i)) deg[i] = 0, nodes.push_back(i); for(int v : nodes) { if(!v) continue; if(S[p[v]]) { ++deg[p[v]]; ++deg[v]; } } for(int v : nodes) { if(deg[v] == 1 && v != u) { leaf = v; break; } } for(int v : adj[u]) if(v != par) { if(comp[v] == -1) { comp[v] = ++idx; st[idx] = st[comp[u]]; bit[v] = bit[leaf]; st[idx][leaf] = 0; st[idx][v] = 1; } dfs(v, u); } } void Build(int n, int m, int A[], int B[]) { for(int i = 0; i < m; ++i) { g[A[i]].push_back(B[i]); g[B[i]].push_back(A[i]); } memset(comp, -1, sizeof comp); gen(0); mark(0); dfs(0); } long long number, c; void visit(int u, long long x, int par = -1) { number |= x << bit[u]; for(int v : adj[u]) if(v != par && st[c][v]) { visit(v, Move(v), u); } if(par + 1) Move(par); } long long Ioi(int n, int m, int A[], int B[], int P, int V, int T) { Build(n, m, A, B); c = comp[P]; visit(P, V); return number; }

Compilation message (stderr)

Joi.cpp: In function 'void dfs(int, int)':
Joi.cpp:41:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = S._Find_first(); i < S.size(); i = S._Find_next(i)) 
                                  ~~^~~~~~~~~~

Ioi.cpp: In function 'void dfs(int, int)':
Ioi.cpp:42:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = S._Find_first(); i < S.size(); i = S._Find_next(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...