This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
vector<vector<int>> graph;
vector<bool> vis;
vector<int> a, r,w;
bool dfs(int n, int energy, bool charger){
//cout << n << ", "<<energy <<", "<<charger<<endl;
if(energy < 0 ) {
vis[n] = false;
return false;
}
if(vis[n]){
vis[n] = false;
if(charger){
return true;
}
return false;
}
vis[n] = true;
for(int adj : graph[n]){
if(r[adj]){
energy = n;
charger = true;
}
bool res = dfs(adj, energy--,charger);
if( a[adj] == 1 && res){
w[adj] = true;
vis[adj] = false;
return true;
}
if(a[adj] == 0 && !res){
w[adj] = false;
vis[adj] = false;
return false;
}
}
return false;
}
vector<int> who_wins(vector<int> a_, vector<int> r_, vector<int> u , vector<int> v){
int n = a_.size();
int m = u.size();
graph.assign(n, {});
vis.assign(n, 0);
w.assign(n, 0);
a = a_;
r=r_;
for(int i =0; i< m;i++){
graph[u[i]].pb(v[i]);
}
for(int i=0; i<n;i++)
dfs(i, n , r_[i]);
return w;
}
/*
int main(){
int n, m; cin >> n >>m;
vector<int> a_(n), r_(n), u(m) ,v(m);
for(int i = 0; i<n; i++){
cin >> a_[i];
}
for(int i =0; i< n; i++)
cin >> r_[i];
for(int i =0; i<m; i++)
cin >> u[i];
for(int i =0; i<m;i++)
cin >> v[i];
vector<int> w_ = who_wins(a_,r_,u,v);
for(int i=0; i< n ;i++)
cout << w_[i]<<endl;
}*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |