Submission #552452

#TimeUsernameProblemLanguageResultExecution timeMemory
552452Killer2501Amusement Park (JOI17_amusement_park)C++14
10 / 100
47 ms33944 KiB
#include "Joi.h" #include <bits/stdc++.h> #define ll long long #define ld long double #define ull unsigned long long #define pb push_back #define pll pair<int, pii> #define pii pair<int, int> #define fi first #define se second using namespace std; const int N = 2e5+2; const int M = 60; const int mod = 1e9+7; const ll base = 1e6; const ll inf = 1e9; int n, m, b[N], a[N], k, d[N], cnt, par[N], f[N]; ll ans; vector<int> adj[N]; bool vis[N]; set<pii> leaf; set<int> st[N]; void dfs(int u) { vis[u] = true; if(cnt < M)d[u] = cnt++; else { auto it = leaf.begin(); if(u != 0 && d[par[u]] == (*it).se)++it; int v = (*it).se; d[u] = v; leaf.erase(it); for(int x: st[v]) { leaf.erase({st[x].size(), x}); st[x].erase(v); leaf.insert({st[x].size(), x}); } st[v].clear(); } leaf.insert({0, d[u]}); if(u != 0) { int v = d[par[u]]; leaf.erase({st[d[u]].size(), d[u]}); leaf.erase({st[v].size(), v}); st[v].insert(d[u]); st[d[u]].insert(v); leaf.insert({st[d[u]].size(), d[u]}); leaf.insert({st[v].size(), v}); } //cout << u <<" "<<d[u]<<'\n'; for(int v: adj[u]) { if(vis[v])continue; par[v] = u; dfs(v); } } void Joi(int n, int m, int A[], int B[], ll x, int T) { for(int i = 0; i < n; i ++) { st[i].clear(); adj[i].clear(); } leaf.clear(); cnt = 0; for(int i = 0; i < m; i ++) { adj[A[i]].pb(B[i]); adj[B[i]].pb(A[i]); } fill_n(d, n, -1); fill_n(par, n, -1); fill_n(vis, n, 0); dfs(0); for(int i = 0; i < n; i ++) MessageBoard(i, (x>>d[i]&1)); }
#include "Ioi.h" #include <bits/stdc++.h> #define ll long long #define ld long double #define ull unsigned long long #define pb push_back #define pll pair<int, pii> #define pii pair<int, int> #define fi first #define se second using namespace std; const int N = 2e5+2; const int M = 60; const int mod = 1e9+7; const ll base = 1e6; const ll inf = 1e9; int n, m, b[N], a[N], k, d[N], cnt, par[N], f[N]; ll ans; vector<int> adj[N]; bool vis[N]; set<pii> leaf; set<int> st[N]; void dfs(int u) { vis[u] = true; if(cnt < M)d[u] = cnt++; else { auto it = leaf.begin(); if(u != 0 && d[par[u]] == (*it).se)++it; int v = (*it).se; d[u] = v; leaf.erase(it); for(int x: st[v]) { leaf.erase({st[x].size(), x}); st[x].erase(v); leaf.insert({st[x].size(), x}); } st[v].clear(); } leaf.insert({0, d[u]}); if(u != 0) { int v = d[par[u]]; leaf.erase({st[d[u]].size(), d[u]}); leaf.erase({st[v].size(), v}); st[v].insert(d[u]); st[d[u]].insert(v); leaf.insert({st[d[u]].size(), d[u]}); leaf.insert({st[v].size(), v}); } //cout << u <<" "<<d[u]<<'\n'; for(int v: adj[u]) { if(vis[v])continue; par[v] = u; dfs(v); } } void cal(int u) { //cout << u <<" "<<d[u]<<" "<<a[d[u]]<<'\n'; for(int v: adj[u]) { if(a[d[v]] == -1) { a[d[v]] = Move(v); cal(v); Move(u); } } } ll Ioi(int n, int m, int A[], int B[], int P, int V, int T) { for(int i = 0; i < n; i ++) { st[i].clear(); adj[i].clear(); } leaf.clear(); cnt = 0; for(int i = 0; i < m; i ++) { adj[A[i]].pb(B[i]); adj[B[i]].pb(A[i]); } fill_n(d, n, -1); fill_n(par, n, -1); fill_n(vis, n, 0); dfs(0); fill_n(a, M, -1); a[d[P]] = V; cal(P); ll res = 0; for(int i = 0; i < M; i ++) { //cout << a[i] <<" "<<i<<'\n'; if(a[i] == -1)return 0; if(a[i]) res |= (1ll<<i); } return res; }
#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...