Submission #1146627

#TimeUsernameProblemLanguageResultExecution timeMemory
1146627_8_8_Amusement Park (JOI17_amusement_park)C++20
0 / 100
8 ms10816 KiB
#include "Joi.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = (int)1e5 + 12, b = 60; mt19937 rng1(123321); vector<int> g1[N], G1[N]; int tin1[N], timer1, va[N]; bool vis1[N], ok1[N]; ll x; void build1(int n) { set<int> cur; function<void(int)> dd = [&](int v) { vis1[v] = 1; for(int to : g1[v]) { if(!vis1[to]) { dd(to); G1[v].push_back(to); } } }; function<void(int)> dfs = [&](int v){ vis1[v] = 1; cur.insert(v); if((int)cur.size() == b) return; for(int to : G1[v]) { if(!vis1[to]) { dfs(to); if((int)cur.size() == b) return; } } }; auto find = [&]() { for(int i : cur) { int col = 0; for(int to : g1[i]) { if(ok1[to]) { col++; } } assert(col); if(col == 1) return i; } exit(-1); }; function<void(int, int)> go = [&](int v, int pr) { for(int to : G1[v]) { int del = -1; if(!ok1[to]) { del = find(); cur.erase(del); cur.insert(to); va[v] = va[del]; } go(to, v); if(!ok1[to]) { cur.insert(del); } } }; dd(0); for(int i = 0; i < n; i++) { vis1[i] = 0; } dfs(0); auto it = (cur.begin()); for(int i = 0; i < b; i++) { ok1[(*it)] = 1; va[(*it)] = i; it++; } go(0, -1); for(int i = 0; i < n; i++) { MessageBoard(i, ((x >> va[i]) & 1)); } } void Joi(int n, int m, int A[], int B[], long long X, int T) { x = X; for(int i = 0; i < m; i++) { g1[A[i]].push_back(B[i]); g1[B[i]].push_back(A[i]); } for(int i = 0; i < n; i++) { sort(g1[i].begin(), g1[i].end()); } build1(n); }
#include "Ioi.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = (int)1e5 + 12, b = 60; mt19937 rng(123321); ll d[N], mxd[N], pr[N], timer, sz[N]; vector<int> g[N], G[N]; int tin[N], bt[N], tout[N], val[N]; bool vis[N], ok[N]; set<int> st[N]; void build(int n) { set<int> cur; function<void(int)> dd = [&](int v) { vis[v] = 1; for(int to : g[v]) { if(!vis[to]) { pr[to] = v; dd(to); G[v].push_back(to); } } }; function<void(int)> dfs = [&](int v){ vis[v] = 1; cur.insert(v); if((int)cur.size() == b) return; for(int to : G[v]) { if(!vis[to]) { dfs(to); if((int)cur.size() == b) return; } } }; auto find = [&]() { for(int i : cur) { int col = 0; for(int to : g[i]) { if(ok[to]) { col++; } } if(col == 1) return i; } }; function<void(int, int)> go = [&](int v, int pr) { for(int to : G[v]) { int del = -1; if(!ok[to]) { // cout << to << "\n"; del = find(); ok[del] = 0; cur.erase(del); cur.insert(to); val[v] = val[del]; st[to] = cur; } go(to, v); if(!ok[to]) { ok[del] = 1; cur.insert(del); } } }; dd(0); for(int i = 0; i < n; i++) { vis[i] = 0; } dfs(0); auto it = (cur.begin()); for(int i = 0; i < b; i++) { st[(*it)] = cur; ok[(*it)] = 1; val[(*it)] = i; it++; } go(0, -1); } long long Ioi(int n, int m, int A[], int B[], int P, int V, int T) { memset(pr, -1, sizeof(pr)); 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()); } build(n); function<void(int, int, int)> dfs = [&](int v, int pr, int f) { bt[val[v]] = f; for(int to : G[v]) { if(ok[to] && to != pr) { dfs(to, v, Move(to)); } } if(pr != -1 && ok[pr]) { Move(pr); } }; for(int i = 0; i < n; i++) { ok[i] = 0; if(pr[i] != -1) { G[i].push_back(pr[i]); } } for(int j : st[P]) { ok[j] = 1; } dfs(P, -1, V); ll res = 0; for(int i = 0; i < b; i++) { if(bt[i]) res += (1ll << i); } return res; }

Compilation message (stderr)

# 2번째 컴파일 단계

Ioi.cpp: In lambda function:
Ioi.cpp:48:5: warning: control reaches end of non-void function [-Wreturn-type]
   48 |     };
      |     ^
#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...