Submission #406949

#TimeUsernameProblemLanguageResultExecution timeMemory
406949Kevin_Zhang_TWToy Train (IOI17_train)C++17
5 / 100
1399 ms262148 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb emplace_back #define AI(i) begin(i), end(i) template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); } template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); } #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } template<class T> void debug(T l, T r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; } #else #define DE(...) 0 #define debug(...) 0 #endif const int MAX_N = 300010; #include "train.h" int dp[MAX_N], w[MAX_N], sum[MAX_N], inst[MAX_N], n; int belong[MAX_N]; vector<int> edge[MAX_N]; bool dfs(int x, int s, int v = 0) { static vector<int> stk, allstk; if (dp[x] != -1) return dp[x] == s; stk.pb(x); allstk.pb(x); inst[x] = true; v += w[x]; sum[x] = v; bool ret = true, ch = false; // A owns it if (belong[x] == 1) { dp[x] = 0; for (int u : edge[x]) { if (dp[u] != -1 && inst[u]) { if (w[u] || sum[x] != sum[u]) { dp[x] = 1; break; } } if (inst[u]) continue; if (dfs(u, 1, v)) { dp[x] = 1; break; } } if (dp[x]) ch = true; if (dp[x] != s) { ret = false; dp[x] = -1; } } else { dp[x] = 1; for (int u : edge[x]) { if (dp[u] != -1 && inst[u]) { if (w[u] == 0 && sum[x] == sum[u]) { dp[x] = 0; break; } } if (inst[u]) continue; if (dfs(u, 0, v)) { DE(u, 0); dp[x] = 0; break; } } if (dp[x] == 0) ch = true; if (dp[x] != s) { ret = false; dp[x] = -1; } } if (ch) { int u; do { u = allstk.back(); dp[x] = -1; allstk.pop_back(); } while (u != x) ; } stk.pop_back(); inst[x] = false; return ret; } std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { n = a.size(); for (int i = 0;i < n;++i) { w[i] = r[i]; belong[i] = a[i]; } for (int i = 0;i < u.size();++i) { edge[ u[i] ].pb( v[i] ); } memset(dp, -1, sizeof(dp)); vector<int> res(n); for (int i = 0;i < n;++i) { res[i] = dfs(i, 1); } return res; }

Compilation message (stderr)

train.cpp: In function 'bool dfs(int, int, int)':
train.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
train.cpp:71:5: note: in expansion of macro 'DE'
   71 |     DE(u, 0);
      |     ^~
train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:104:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |  for (int i = 0;i < u.size();++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...
#Verdict Execution timeMemoryGrader output
Fetching results...