#include<bits/stdc++.h>
using namespace std;
std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
vector<vector<int>> Next(a.size());
vector<vector<int>> INext(a.size());
int n=a.size();
for(int i=0; i<u.size(); i++) {
Next[u[i]].push_back(v[i]);
INext[v[i]].push_back(u[i]);
}
std::vector<int> rC=r;
for(int sur=0; sur<n; sur++) {
vector<int> Swap(n,0);
vector<int> NewR(n,0);
for(int i=0; i<n; i++) {
if(a[i]==1) {
Swap[i]=1;
}
else {
Swap[i]=Next[i].size();
}
}
std::stack<int> Process;
for(int i=0; i<n; i++) {
if(r[i]==1) {
Process.push(i);
NewR[i]=1;
}
}
while(!Process.empty()) {
int indx=Process.top();
Process.pop();
for(int i=0; i<INext[indx].size(); i++) {
if(Swap[INext[indx][i]]==1) {
if(NewR[INext[indx][i]]==0) {
Process.push(INext[indx][i]);
NewR[INext[indx][i]]=1;
}
}
Swap[INext[indx][i]]--;
}
}
Swap =vector<int>(n,0);
vector<int> NewRR(n,1);
for(int i=0; i<n; i++) {
if(a[i]==0) {
Swap[i]=1;
}
else {
Swap[i]=Next[i].size();
}
}
for(int i=0; i<n; i++) {
if(NewR[i]==0) {
Process.push(i);
NewRR[i]=0;
}
}
while(!Process.empty()) {
int indx=Process.top();
Process.pop();
for(int i=0; i<INext[indx].size(); i++) {
if(Swap[INext[indx][i]]==1) {
if(NewRR[INext[indx][i]]==1) {
Process.push(INext[indx][i]);
NewRR[INext[indx][i]]=0;
}
}
Swap[INext[indx][i]]--;
}
}
rC=NewRR;
for(int i=0;i<n;i++){
r[i]=r[i] && rC[i];
}
}
vector<int> Sol;
for(int i=0; i<n; i++) {
Sol.push_back(rC[i]);
}
return Sol;
}
# | 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... |