Submission #54994

#TimeUsernameProblemLanguageResultExecution timeMemory
54994cki86201Cop and Robber (BOI14_coprobber)C++11
100 / 100
446 ms12000 KiB
#include "coprobber.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> #include <math.h> #include <assert.h> #include <queue> #include <map> #include <set> #include <string> #include <algorithm> #include <iostream> #include <functional> #include <unordered_map> #include <unordered_set> #include <list> #include <bitset> #include <complex.h> using namespace std; typedef pair<int, int> pii; typedef long long ll; #define Fi first #define Se second #define pb(x) push_back(x) #define szz(x) ((int)(x).size()) #define rep(i, n) for(int i=0;i<n;i++) #define all(x) (x).begin(), (x).end() typedef tuple<int, int, int> t3; typedef pair<ll, ll> pll; typedef long double ldouble; typedef pair<double, double> pdd; int d[2][510][510], nxt[510][510], cnt[510][510]; int deg[510]; vector <t3> V; int now_p; int start(int N, bool A[MAX_N][MAX_N]) { rep(i, N) rep(j, N) deg[i] += A[i][j]; rep(i, N) rep(k, 2) V.pb(t3(k, i, i)), d[k][i][i] = 1, nxt[i][i] = -1; rep(i,szz(V)) { int t, p, r; tie(t, p, r) = V[i]; if(t == 0) { rep(j, N) if(A[r][j]) { if(d[1][p][j] == 0) { cnt[p][j]++; if(cnt[p][j] == deg[j]) { d[1][p][j] = 1; V.pb(t3(1, p, j)); } } } } else { rep(j, N) if(A[p][j] || j == p) { if(d[0][j][r] == 0) { nxt[j][r] = p; d[0][j][r] = 1; V.pb(t3(0, j, r)); } } } } rep(i, N) { int ok = 1; rep(j, N) if(d[0][i][j] == 0) { ok = 0; break; } if(ok) return now_p = i; } return -1; } int nextMove(int R) { return now_p = nxt[now_p][R]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...