Submission #239488

#TimeUsernameProblemLanguageResultExecution timeMemory
239488Jatana장난감 기차 (IOI17_train)C++17
16 / 100
130 ms1152 KiB
#include "train.h"
#include <iostream>
#define le(v) ((int)v.size())
#define x first
#define y second
#define pb push_back
#define f(i, n) for (int i = 0; i < (n); i++)

using namespace std;

int n, m;
vector<int> who;
vector<vector<int>> g;
vector<int> c;
vector<int> ic;

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) {
	g.clear();
	c.clear();
	who.clear();
	who = a;
	n = le(a);
	m = le(u);
	ic = c = r;	
	g.resize(n);
	// cerr <<n << endl;
	// f(i, m) {
		// cerr << u[i] << " " << v[i] << endl;
	// }
	// return c;
	f(i, m) {
		g[u[i]].pb(v[i]);
	}
	while (true) {
		vector<int> was = c;
		for (int i = 0; i < n; i++) {
			if (who[i] == 1) {
				// indefinitely
				for (int sub : g[i]) {
					if (c[sub]) {
						c[i] = 1;
					}
				}
			} else {
				// finitely
				bool some = false;
				for (int sub : g[i]) {
					if (!c[sub]) {
						some = true;
					}
				}
				if (!some) {
					c[i] = 1;
				}
			}
		}
		if (was == c) break;
	}
	while (true) {
		vector<int> was = c;
		for (int i = 0; i < n; i++) {
			if (who[i] == 1) {
				// indefinitely
				bool some = false;
				for (int sub : g[i]) {
					if (sub == i) {
						if (ic[i]) some = true;
					} else
					if (c[sub]) {
						some = true;
					}
				}
				if (!some) {
					c[i] = 0;
				}
			} else {
				// finitely
				for (int sub : g[i]) {
					if (!c[sub]) {
						c[i] = 0;
					}
				}
			}
		}
		if (was == c) break;
	}
	return c;
	// vector<int> res(a.size());
	// for(int i = 0; i < (int)res.size(); i++)
	// 	res[i] = i % 2;
	// return res;
}
#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...