제출 #514823

#제출 시각아이디문제언어결과실행 시간메모리
514823amunduzbaevAmusement Park (JOI17_amusement_park)C++14
100 / 100
80 ms5840 KiB
#include "bits/stdc++.h" using namespace std; #include "Joi.h" const int N = 1e4 + 5; vector<int> G[N], tt, ee[N]; int used[N], in[N], cnt = 1; bitset<60> gg[60], uu; void dfs(int u){ used[u] = 1; for(auto x : G[u]){ if(used[x]) continue; ee[u].push_back(x); ee[x].push_back(u); if((int)tt.size() < 60){ in[x] = tt.size(); gg[in[u]][in[x]] = gg[in[x]][in[u]] = 1; tt.push_back(x); dfs(x); continue; } int par = -1; bitset<60> tmp; for(int i=0;i<60;i++){ if(i == in[u]) continue; int cc = 0; for(int j=0;j<60;j++) cc += gg[i][j]; if(cc != 1) continue; tmp = gg[i], par = tt[i]; for(int j=0;j<60;j++) gg[i][j] = gg[j][i] = 0; tt[i] = x; gg[in[u]][i] = gg[i][in[u]] = 1; in[x] = i; break; } dfs(x); //~ assert(~par); for(int j=0;j<60;j++){ gg[in[par]][j] = gg[j][in[par]] = tmp[j]; } tt[in[par]] = par; } } void Joi(int n, int m, int a[], int b[], long long x, int t){ for(int i=0;i<m;i++){ G[a[i]].push_back(b[i]); G[b[i]].push_back(a[i]); } for(int i=0;i<n;i++){ sort(G[i].begin(), G[i].end()); } tt.push_back(0); memset(in, -1, sizeof in); in[0] = 0; dfs(0); //~ for(int i=0;i<n;i++) cout<<in[i]<<" "; //~ cout<<"\n"; for(int i=0;i<n;i++){ assert(~in[i]); MessageBoard(i, x >> in[i] & 1); } }
#include "bits/stdc++.h" using namespace std; #include "Ioi.h" const int N = 1e4 + 5; vector<int> G[N], tt, ee[N]; int used[N], in[N], cnt = 1; bitset<60> gg[60], uu; void dfs(int u){ used[u] = 1; for(auto x : G[u]){ if(used[x]) continue; ee[u].push_back(x); ee[x].push_back(u); if((int)tt.size() < 60){ in[x] = tt.size(); gg[in[u]][in[x]] = gg[in[x]][in[u]] = 1; tt.push_back(x); dfs(x); continue; } int par = -1; bitset<60> tmp; for(int i=0;i<60;i++){ if(i == in[u]) continue; int cc = 0; for(int j=0;j<60;j++) cc += gg[i][j]; if(cc != 1) continue; tmp = gg[i], par = tt[i]; for(int j=0;j<60;j++) gg[i][j] = gg[j][i] = 0; tt[i] = x; gg[in[u]][i] = gg[i][in[u]] = 1; in[x] = i; break; } dfs(x); //~ assert(~par); for(int j=0;j<60;j++){ gg[in[par]][j] = gg[j][in[par]] = tmp[j]; } tt[in[par]] = par; } } long long Ioi(int n, int m, int a[], int b[], int p, int v, int t){ for(int i=0;i<m;i++){ G[a[i]].push_back(b[i]); G[b[i]].push_back(a[i]); } for(int i=0;i<n;i++){ sort(G[i].begin(), G[i].end()); } tt.push_back(0); memset(in, -1, sizeof in); in[0] = 0; dfs(0); //~ for(int i=0;i<n;i++) cout<<in[i]<<" "; //~ cout<<"\n"; memset(used, 0, sizeof used); long long x = 0; function<void(int)> go = [&](int u){ used[u] = uu[in[u]] = 1; if(v) x |= (1ll << in[u]); for(auto x : ee[u]){ if(used[x] || uu[in[x]]) continue; v = Move(x), go(x), v = Move(u); } }; go(p); for(int i=0;i<60;i++) assert(uu[i]); return x; }
#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...