Submission #291051

#TimeUsernameProblemLanguageResultExecution timeMemory
291051SaboonToy Train (IOI17_train)C++17
0 / 100
725 ms1144 KiB
// Subtask 4
#include "train.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn = 5000 + 10;
int n, m;

vector<int> g[maxn], r;
bool visited[maxn];

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) {
	n = a.size(), m = u.size();
	for (int i = 0; i < m; i++)
		g[u[i]].push_back(v[i]);
	vector<int> dp(n), pd(n);
	for (int i = 0; i < n; i++){
		dp[i] = r[i];
		pd[i] = 0;
	}
	for (int t = 0; t < n; t++){
		for (int i = 0; i < n; i++){
			if (r[i])
				continue;
			if (a[i] == 1){
				for (auto j : g[i])
					dp[i] |= dp[j];
			}
			else{
				int tmp = 1;
				for (auto j : g[i])
					tmp &= dp[j];
				dp[i] = tmp;
			}
		}
	}
	for (int i = 0; i < n; i++)
		if (r[i] == 1)
			for (int j = 0; j < m; j++)
				if (u[j] == i and dp[v[j]])
					pd[i] = 1;
	for (int t = 0; t < n; t++){
		for (int i = 0; i < n; i++){
			if (a[i] == 1){
				for (auto j : g[i])
					pd[i] |= pd[j];
			}
		}
	}
	for (int t = 0; t < n; t++){
		for (int i = 0; i < n; i++){
			if (a[i] == 1){
				for (auto j : g[i])
					pd[i] |= dp[j];
			}
			else{
				int tmp = 1;
				for (auto j : g[i])
					tmp &= pd[j];
				pd[i] = tmp;
			}
		}
	}
	return pd;
}
#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...