Submission #127719

#TimeUsernameProblemLanguageResultExecution timeMemory
127719ShushWerewolf (IOI18_werewolf)C++17
15 / 100
4010 ms50108 KiB
#include <bits/stdc++.h>
#include "werewolf.h"
using namespace std;

int n, m, q, c = 0;
vector<int> s, e, l, r, a;
vector<vector<int>>adj, v;

bool dfs(int u, int w = 0){
//	cerr << u << " " << w << "\n";
	if(u == e[c] && w) return true;
	bool ans = false;
	v[u][w] = 1;
	for(int t : adj[u]){

		if(!v[t][w]){
			if(l[c] > t && !w) {
//				cerr << t << " invalid " << w << "\n";
				continue;
			}
			if(r[c] < t && w) {
//				cerr << t << " invalid " << w << "\n";
				continue;
			}
			if(l[c] <= t && r[c] >= t){
				if(!w)
				ans = ans || dfs(t, 0);
				ans = ans || dfs(t, 1);

			}
			else
			ans = ans || dfs(t, w);
		}
	}
	return ans;
}

vector<int> check_validity(int N, std::vector<int> X, std::vector<int> Y, std::vector<int> S, std::vector<int> E, std::vector<int> L, std::vector<int> R) {
	n = N, m = X.size(), q =  S.size();
	adj = vector<vector<int>> (n);
	for(int i = 0; i < m; i++){
		adj[X[i]].push_back(Y[i]);
		adj[Y[i]].push_back(X[i]);
	}
	s = S, e = E, l = L, r = R;
	a = vector<int> (q);
	for(int i = 0; i < q; i++, c++){
		v = vector<vector<int>>(n, vector<int> (2, 0));
		if(s[i] >= l[i] && s[i] <= r[i])
		a[i] = dfs(s[i]) || dfs(s[i], 1);
		else
		a[i] = dfs(s[i]);
	}
	return a;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...