Submission #1198637

#TimeUsernameProblemLanguageResultExecution timeMemory
1198637dostsToy Train (IOI17_train)C++20
0 / 100
7 ms1608 KiB
#include "train.h"
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int> 
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " << 
#define all(x) x.begin(),x.end()
using namespace std;
vi ans,go,chk;
vector<vi> edges,egdes;

void dfs(int node) {
	if (ans[node]) return;
	ans[node] = 1;
	for (auto it : egdes[node]) {
		dfs(it);
	}
}

int fl;

void dfs2(int node) {
	if (go[node]) return;
	go[node] = 1;
	for (auto it : edges[node]) {
		dfs2(it);
	}
}

void check(int node,int root) {
	if (chk[node]) return;
	chk[node] = 1;
	for (auto it : edges[node]) {
		if (it == root){
			fl = 1;
			check(it,root);
		}
	}
}

std::vector<int32_t> who_wins(std::vector<int32_t> a, std::vector<int32_t> r, std::vector<int32_t> u, std::vector<int32_t> v) {
	int n = a.size();
	std::vector<int32_t> res(n);
	ans.assign(n,0);
	go.assign(n,0);
	edges.resize(n);
	egdes.resize(n);
	int m = u.size();
	for (int i = 0;i<m;i++) {
		edges[u[i]].push_back(v[i]);
		egdes[v[i]].push_back(u[i]);
	}
	if (*min_element(all(a)) == 1) {
		//hepsi benim
		for (int i = 0;i<n;i++) {
			if (r[i]) {
				chk.assign(n,0);
				fl = 0;
				check(i,i);
				if (!fl) continue;
				dfs(i),dfs2(i);
			}
		}
		for (int i = 0;i<n;i++) res[i] = ans[i]&&go[i];
	}
	else if (*max_element(all(a)) == 0) {
		//hepsi onun
	}
	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...