제출 #239487

#제출 시각아이디문제언어결과실행 시간메모리
239487Jatana장난감 기차 (IOI17_train)C++17
0 / 100
13 ms1408 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> 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);
	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 (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...