# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1239252 | moondarkside | 장난감 기차 (IOI17_train) | C++20 | 0 ms | 0 KiB |
#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());
int n=a.size();
for(int i=0; i<u.size(); i++) {
Next[u[i]].push_back(v[i]);
}
std::vector<int> rC=r;
for(int sur=0;sur<n;sur++){
vector<int> prC=rC;
rC=r;
bool cambio=true;
for(int ronda=0; ronda<n && cambio; ronda++) {
cambio=false;
for(int i=0; i<n; i++) {
if(rC[i]!=1) {
if(a[i]==1) {
for(int j=0; j<Next[i].size(); j++) {
if(rC[Next[i][j]]==1) {
rC[i]=1;
cambio=true;
}
}
}
else {
int ns=1;
for(int j=0; j<Next[i].size(); j++) {
ns=ns*rC[Next[i][j]];
}
rC[i]=ns;
if(ns==1){
cambio=true;
}
}
}
}
}
cambio=true;
for(int ronda=0; ronda<n && cambio; ronda++) {
cambio=false;
for(int i=0; i<n; i++) {
if(rC[i]==1) {
if(a[i]==0) {
for(int j=0; j<Next[i].size(); j++) {
if(rC[Next[i][j]]==0) {
rC[i]=0;
cambio=true;
}
}
}
else {
int ns=1;
for(int j=0; j<Next[i].size(); j++) {
ns=ns*(1-rC[Next[i][j]]);
}
rC[i]=1-ns;
if(ns==1){
cambio=true;
}
}
}
}
}
bool change=true;
for(int i=0;i<n;i++){
r[i]=r[i] && rC[i];
if(prC[i]==rC[i]){
change=false;
}
}
if(change){
vector<int> Sol;
for(int i=0;i<n;i++){
Sol.push_back(rC[i]);
}
return Sol;
}
}
vector<int> Sol;
for(int i=0;i<n;i++){
Sol.push_back(rC[i]);
}
return Sol;
}
int main()
{
vector<int> A=who_wins((vector<int>) {
1,1,1
}, (vector<int>) {
0,1,0
}, (vector<int>) {
0,0,1,2
}, (vector<int>) {
0,1,2,2
});
for(int i=0; i<A.size(); i++) {
cout<<A[i]<<"\n";
}
}