이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "train.h"
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair <int,int> pi;
typedef vector <int> vec;
int s[5005],revs[5005],no[5005],n,m,ind[5005],ing[5005];
vec ans,v[5005];
vec who_wins(vec a,vec r,vec u1,vec u2) {
n = a.size();
m = u1.size();
for(int i = 0;i < m;i++) {
int y = u1[i], x = u2[i];
v[x].push_back(y);
ind[y]++;
}
for(int i = 0;i < n;i++) no[i] = r[i];
queue <int> q;
while(1) {
memset(ing,0,sizeof(ing));
for(int i = 0;i < n;i++) {
if(no[i]) q.push(i);
s[i] = no[i];
}
while(!q.empty()) {
int x = q.front(); q.pop();
for(int i : v[x]) {
if(s[i]) continue;
ing[i]++;
if(!a[i]) {
if(ing[i] == ind[i]) {
s[i] = 1;
q.push(i);
}
}
else {
if(ing[i]) {
s[i] = 1;
q.push(i);
}
}
}
}
memset(ing,0,sizeof(ing));
for(int i = 0;i < n;i++) {
if(s[i]^1) q.push(i);
revs[i] = s[i]^1;
}
while(!q.empty()) {
int x = q.front(); q.pop();
for(int i : v[x]) {
if(revs[i]) continue;
ing[i]++;
if(a[i]) {
if(ing[i] == ind[i]) {
revs[i] = 1;
q.push(i);
}
}
else {
if(ing[i]) {
revs[i] = 1;
q.push(i);
}
}
}
}
int ch = 0;
for(int i = 0;i < n;i++) {
if(no[i]&&revs[i]) ch = 1, no[i] = 0;
}
if(!ch) break;
}
for(int i = 0;i < n;i++) {
ans.push_back(revs[i]^1);
}
return ans;
}
# | 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... |