제출 #972049

#제출 시각아이디문제언어결과실행 시간메모리
972049mariaclaraToy Train (IOI17_train)C++17
11 / 100
770 ms1628 KiB
#include "train.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pii; const int INF = 1e9+10; const ll LINF = 1e18+10; #define all(x) x.begin(), x.end() #define sz(x) x.size() #define mk make_pair #define pb push_back #define f first #define s second int t, grau[5005], at_grau[5005]; bool valid[5005], B[5005], R[5005]; vector<int> edges[5005]; void dfs(int x) { for(int viz : edges[x]) { if(R[viz]) continue; at_grau[viz]--; if(B[viz] and !valid[viz]) valid[viz] = 1, dfs(viz); if(at_grau[viz] == 0 and !valid[viz]) valid[viz] = 1, dfs(viz); } } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { int n = sz(a), m = sz(u); vector<int> ans(n,1); for(int i = 0; i < m; i++) edges[v[i]].pb(u[i]), grau[u[i]]++; for(int i = 0; i < n; i++) B[i] = !a[i], R[i] = r[i]; queue<int> fila; for(int i = 0; i < n; i++) { if(r[i]) continue; for(int j = 0; j < n; j++) at_grau[j] = grau[i], valid[j] = 0; dfs(i); if(valid[i]) fila.push(i); } while(!fila.empty()) { int x = fila.front(); fila.pop(); if(!ans[x]) continue; ans[x] = 0; for(int viz : edges[x]) { grau[viz]--; if(grau[viz] == 0) fila.push(viz); else if(!a[viz]) fila.push(viz); } } return ans; }
#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...