제출 #607358

#제출 시각아이디문제언어결과실행 시간메모리
607358fvogel499장난감 기차 (IOI17_train)C++17
12 / 100
13 ms3156 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; #define vi vector<int> #define size(x) (int)((x).size()) std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { int n = size(a); int chargingStation = -1; for (int i = 0; i < n; i++) if (r[i]) { chargingStation = i; } vector<vi> graph(3*n+1); vector<vi> ng(size(graph)); vi inc(3*n+1, 0); vi typ(size(graph)); typ.back() = 0; for (int i = 0; i < 3*n; i++) { typ[i] = a[i/3]; } for (int k = 0; k < size(u); k++) { for (int i = 0; i < 3; i++) { int to = i; if (v[k] == chargingStation) { to++; } int toNode = v[k]*3+to; if (to == 3) toNode = size(graph)-1; graph[toNode].push_back(u[k]*3+i); ng[u[k]*3+i].push_back(toNode); inc[u[k]*3+i]++; } } vector<int> win(size(graph), 0); for (int i = 0; i < size(graph); i++) win[i] = false; queue<int> q; q.push(size(graph)-1); win[size(graph)-1] = true; while (!q.empty()) { int x = q.front(); q.pop(); for (int y : graph[x]) { if (typ[y] == 1) { if (!win[y]) { q.push(y); win[y] = true; } } else { inc[y]--; assert(inc[y] >= 0); if (inc[y] == 0) { assert(!win[y]); q.push(y); win[y] = true; } } } } vi fin(n); for (int i = 0; i < n; i++) fin[i] = win[i*3+1]; return fin; }
#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...