Submission #1208445

#TimeUsernameProblemLanguageResultExecution timeMemory
1208445HanksburgerToy Train (IOI17_train)C++17
12 / 100
5 ms1352 KiB
#include "train.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[5005], rev[5005];
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> U, vector<int> V)
{
	int n=a.size();
	vector<int> cnt(n, 0), ok(n, 0), ans(n, 0);
	for (int i=0; i<U.size(); i++)
	{
		adj[U[i]].push_back(V[i]);
		rev[V[i]].push_back(U[i]);
	}
	queue<int> q;
	for (int i=0; i<n; i++)
	{
		if (r[i])
		{
			ok[i]=1;
			q.push(i);
		}
	}
	while (!q.empty())
	{
		int u=q.front();
		q.pop();
		for (int v:rev[u])
		{
			if (ok[v])
				continue;
			if (a[v] || ++cnt[v]==adj[v].size())
			{
				ok[v]=1;
				q.push(v);
			}
		}
	}
	for (int i=0; i<n; i++)
	{
		cnt[i]=0;
		if (!r[i])
			continue;
		ans[i]=1-a[i];
		for (int v:adj[i])
			if (a[i]^ok[v]^1)
				ans[i]=a[i];
		if (ans[i])
			q.push(i);
	}
	while (!q.empty())
	{
		int u=q.front();
		q.pop();
		for (int v:rev[u])
		{
			if (ans[v])
				continue;
			if (a[v] || ++cnt[v]==adj[v].size())
			{
				ans[v]=1;
				q.push(v);
			}
		}
	}
	return ans;
}
#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...