Submission #1239282

#TimeUsernameProblemLanguageResultExecution timeMemory
1239282moondarksideToy Train (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...