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> r;
int chargerind;
vector<int> ord;
bool dfs(int n, int energy, bool charger, int order){
//cout << n << ", "<<energy << ", "<<charger<<", "<<order<<endl;
if(vis[n]){
if(charger && chargerind >= ord[n]){
//cout << chargerind <<" "<<n<<" "<<ord[n]<<endl;
return true;
}
return false;
}
vis[n] = true;
ord[n] = order;
for(int adj : graph[n]){
if(r[adj]){
energy = r.size();
chargerind = order;
charger = true;
}
bool res = dfs(adj, energy--,charger, order+1);
if( res){
return true;
}
}
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);
vector<int> w(n,0);
r=r_;
for(int i =0; i< m;i++){
graph[u[i]].pb(v[i]);
//cout << u[i]<<" ->" <<v[i]<<endl;
}
for(int i=0; i<n;i++){
//cout << i<<": "<<endl;
chargerind = -1;
if(r_[i]) chargerind = 0;
vis.assign(n, 0);
ord.assign(n,0);
w[i] = dfs(i, n , r_[i], 0);
}
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... |