제출 #437448

#제출 시각아이디문제언어결과실행 시간메모리
437448maomao90던전 (IOI21_dungeons)C++17
11 / 100
7033 ms36916 KiB
#include "dungeons.h" #include <bits/stdc++.h> using namespace std; #define REP(i, j, k) for (int i = j; i < k; i++) #define RREP(i, j, k) for (int i = j; i >= k; i--) template <class T> inline void mnto(T& a, T b) {return a > b ? a = b, 1 : 0;} template <class T> inline void mxto(T& a, T b) {return a < b ? a = b, 1 : 0;} typedef long long ll; #define MP make_pair #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; #define ALL(x) x.begin(), x.end() #define pb push_back typedef vector<int> vi; typedef vector<ii> vii; typedef vector<ll> vll; #ifdef DEBUG #define debug(args...) _debug(args) inline void _debug(const char* format, ...) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } #else #define debug(args...) #endif #define INF 1000000005 #define LINF 1000000000000000005 #define MAXN 400005 #define MAXL 30 int n; vi s, w, l, v; vll p, r; bool visited[MAXN]; vi topo; void getTopo(int u) { if (!visited[w[u]]) { visited[w[u]] = 1; getTopo(w[u]); } topo.pb(u); } void getTopo1(int u) { if (!visited[l[u]]) { visited[l[u]] = 1; getTopo1(l[u]); } topo.pb(u); } void init(int _n, vi _s, vi _p, vi _w, vi _l) { n = _n; s = _s, w = _w, l = _l; s.pb(0); _p.pb(0); w.pb(n); l.pb(n); REP (i, 0, n + 1) { r.pb(s[i]); p.pb(_p[i]); } REP (i, 0, n) { if (!visited[i]) { visited[i] = 1; getTopo(i); } } for (int &i : topo) { if (i == n) continue; if (s[w[i]] <= r[i] + s[i]) { r[i] += r[w[i]]; w[i] = w[w[i]]; } debug("%d: %d %lld\n", i, w[i], r[i]); } topo.clear(); REP (i, 0, n) { if (!visited[i]) { visited[i] = 1; getTopo1(i); } } REP (k, 0, 100) { for (int &i : topo) { if (s[l[i]] >= s[i] + p[i]) { p[i] += p[l[i]]; l[i] = l[l[i]]; } } } } ll simulate(int x, int z) { ll ans = z; while (x != n) { if (ans >= s[x]) { ans += r[x]; x = w[x]; } else { ans += p[x]; x = l[x]; } } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...