제출 #1239282

#제출 시각아이디문제언어결과실행 시간메모리
1239282moondarkside장난감 기차 (IOI17_train)C++20
100 / 100
1077 ms1612 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()); 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...