Submission #1246137

#TimeUsernameProblemLanguageResultExecution timeMemory
1246137QuentolosseToy Train (IOI17_train)C++20
0 / 100
68 ms1288 KiB
#include "train.h"

#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) {
	int n = a.size();
	int m = u.size();

	int k = 0;
	for (auto &&i : r)
	{
		k += i;
	}

	vector<int> nb_sortantes(n, 0);
	for (auto &&i : u)
	{
		nb_sortantes[i]++;
	}
	
	vector<vector<int>> graphe_inv(n);
	for (int i = 0; i < m; i++)
	{
		graphe_inv[v[i]].push_back(u[i]);
	}
	
	vector<int> avant(n, true);
	
	for (int _ = 0; _ < k+42; _++)
	{
		vector<int> actuels(n, 0);
		vector<int> pile;
		vector<int> s;
		s = nb_sortantes;

		for (int i = 0; i < n; i++)
		{
			if (r[i] && avant[i]) {
				pile.push_back(i);
			}
		}
		
		while(!pile.empty()) {
			int c = pile.back();
			pile.pop_back();

			if (actuels[c] == 1) continue;

			if (actuels[c] == 0 && r[c]) {
				actuels[c] = -1;
			}
			else {
				if (r[c]) continue;
				actuels[c] = true;
			}

			for (auto &&i : graphe_inv[c])
			{
				if (actuels[i] == 1) continue;
				if (a[i]) pile.push_back(i);
				else if (--s[i] == 0) pile.push_back(i);
			}
		}

		for (auto &&i : actuels)
		{
			if (i == -1) i = 0;
		}
		

		avant = actuels;
	}
	
	return avant;

}
#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...