제출 #427040

#제출 시각아이디문제언어결과실행 시간메모리
427040someone장난감 기차 (IOI17_train)C++14
0 / 100
1298 ms1396 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; const int N = 1e4 + 42, INF = 1e9; bool ch[N]; int n, m, val[N][2]; vector<int> adj[N]; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { n = a.size(); m = u.size(); for(int i = 0; i < m; i++) adj[v[i]].push_back(u[i]); for(int i = 0; i < 2*n; i++) { //cout << " " << i << '\n'; for(int j = 0; j < n; j++) { int pds = -1; if(r[j] == 1) pds += n; for(int k : adj[j]) { if(a[0] == 1) { //cout << k << ' ' << val[k][1 - (i % 2)] << '\n'; val[k][1 - (i % 2)] = max(val[k][1 - (i % 2)], val[j][i % 2] + pds); //cout << val[k][1 - (i % 2)] << '\n'; } else val[k][1 - (i % 2)] = min(val[k][1 - (i % 2)], val[j][i % 2] + pds); } }/* for(int j = 0; j < n; j++) cout << val[j][1 - (i % 2)] << ' '; cout << '\n';*/ } int i = 2*n; /*for(int j = 0; j < n; j++) cout << val[j][1 - (i % 2)] << ' '; cout << '\n';*/ for(int j = 0; j < n; j++) { int pds = -1; if(r[j]) pds += n; for(int k : adj[j]) if(a[0] == 1) { if(val[k][1 - (i % 2)] != max(val[k][1 - (i % 2)], val[j][i % 2] + pds)) { ch[k] = true; val[k][1 - (i % 2)] = max(val[k][1 - (i % 2)], val[j][i % 2] + pds); } } else { if(val[k][1 - (i % 2)] != min(val[k][1 - (i % 2)], val[j][i % 2] + pds)) { ch[k] = true; val[k][1 - (i % 2)] = min(val[k][1 - (i % 2)], val[j][i % 2] + pds); } } } /*for(int j = 0; j < n; j++) cout << val[j][(i % 2)] << ' '; cout << '\n'; for(int j = 0; j < n; j++) cout << val[j][1 - (i % 2)] << ' '; cout << '\n';*/ vector<int> res(n); for(int i = 0; i < n; i++) if(ch[i]) res[i] = 1; return res; }
#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...