제출 #702995

#제출 시각아이디문제언어결과실행 시간메모리
702995Abrar_Al_Samit장난감 기차 (IOI17_train)C++17
0 / 100
31 ms1748 KiB
#include<bits/stdc++.h>
using namespace std;

#define vi vector<int>

const int nax = 5000;
vi g[nax], gt[nax];
int n, m;
vector<int>stk;
int vis[nax];
bool cyc[nax];

void dfs(int v) {
	if(vis[v]==1) {
		for(int i=stk.size()-1; ; --i) {
			cyc[stk[i]] = true;
			if(stk[i]==v) break;
		}
		return;
	}
	stk.push_back(v);
	vis[v] = 1;

	for(int to : g[v]) {
		if(vis[to]!=2) {
			dfs(to);
		}
	}
	vis[v] = 2;
	stk.pop_back();
}
vi who_wins(vi a, vi r, vi u, vi v) {
	n = a.size(), m = u.size();

	for(int i=0; i<m; ++i) {
		g[u[i]].push_back(v[i]);
		gt[v[i]].push_back(u[i]);
	}

	for(int i=0; i<n; ++i) if(!vis[i]) {
		dfs(i);
	}
	queue<int>q;
	vi ret(n);

	for(int i=0; i<n; ++i) if(r[i] && cyc[i]) {
		q.push(i);
		ret[i] = 1;
	}
	while(!q.empty()) {
		int v = q.front();
		q.pop();

		for(int to : gt[v]) {
			if(!ret[to]) {
				ret[to] = 1;
				q.push(to);
			}
		}
	}


	// for(int i=0; i<n; ++i) if(r[i] && a[i]) {
	// 	bool self_loop = false;
	// 	for(int to : g[i]) {
	// 		self_loop |= to==i;
	// 	}
	// 	if(self_loop) {
	// 		q.push(i);
	// 		ret[i] = 1;
	// 	}
	// }

	// for(int i=0; i<n; ++i) if(r[i] && !a[i]) {
	// 	if(g[i].size()==1 && g[i][0]==i) {
	// 		ret[i] = 1;
	// 		q.push(i);
	// 	}
	// }


	// while(!q.empty()) {
	// 	int v = q.front();
	// 	q.pop();

	// 	if(!r[v] && !a[v]) {
	// 		bool self_loop = false;
	// 		for(int to : g[v]) {
	// 			self_loop |= to==v;
	// 		}
	// 		if(self_loop) {
	// 			ret[v] = 0;
	// 			continue;
	// 		}
	// 	}

	// 	for(int to : gt[v]) if(!ret[to]) {
	// 		ret[to] = 1;
	// 		q.push(to);
	// 	}
	// }
	return ret;
}
#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...