제출 #408463

#제출 시각아이디문제언어결과실행 시간메모리
4084638e7장난감 기차 (IOI17_train)C++14
100 / 100
1033 ms1752 KiB
#include "train.h" //Challenge: Accepted #include <iostream> #include <algorithm> #include <vector> #include <utility> #include <queue> #define ll long long #define maxn 5005 #define pii pair<int, int> #define ff first #define ss second #define io ios_base::sync_with_stdio(0);cin.tie(0); using namespace std; int own[maxn], del[maxn]; vector<int> adj[maxn], rev[maxn]; vector<int> f(int a, vector<int> st, int n) { bool found[n]; int deg[n]; for (int i = 0;i < n;i++){ found[i] = 0; deg[i] = 0; for (int j:adj[i]) { if (!del[j]) deg[i]++; } } queue<int> que; for (int i:st) { found[i] = 1; que.push(i); } while (que.size()) { int cur = que.front();que.pop(); found[cur] = 1; for (int v:rev[cur]) { if (found[v] || del[v]) continue; deg[v]--; if (own[v] == a || deg[v] == 0) { found[v] = 1; que.push(v); } } } vector<int> ret (n, 0); for (int i = 0;i < n;i++) ret[i] = found[i] ? 1 : 0; return ret; } std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { int n = a.size(), m = u.size(); vector<int> b; for (int i = 0;i < n;i++){ own[i] = a[i]; if (r[i]) b.push_back(i); } for (int i = 0;i < m;i++) { adj[u[i]].push_back(v[i]); rev[v[i]].push_back(u[i]); } vector<int> ret(n, 0); while (true) { vector<int> fa = f(1, b, n); vector<int> t; for (int i = 0;i < n;i++) { if (!fa[i] && !del[i]) t.push_back(i); } //cout << endl; //for (int i:t) cout << i << " "; //cout << endl; vector<int> fb = f(0, t, n); int found = 0; for (int i = 0;i < n;i++) { if (fb[i]) { found = 1; del[i] = 1; } } if (!found) { for (int i = 0;i < n;i++) { if (fa[i]) ret[i] = 1; } break; } vector<int> tmp; for (int i:b) { if (!del[i]) tmp.push_back(i); } b = tmp; } return ret; }
#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...