Submission #423666

#TimeUsernameProblemLanguageResultExecution timeMemory
423666PbezzWerewolf (IOI18_werewolf)C++14
15 / 100
4041 ms41868 KiB
#include "werewolf.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
typedef pair<ll,ll> pii;

const ll MAXN = 2e5+5;
const ll INF = 1e9+7;

vector<vector<ll>>adj(MAXN);
bool state[MAXN][2];
//state[i][0]==true means e possivel chegar a i enquanto human
int l,r,e;
void dfs(ll node, ll wolf){//cout<<node<<" "<<wolf<<endl;

state[node][wolf]=true;

//nao mudar nada
for(auto u:adj[node]){
if(state[u][wolf]==true)continue;

if(wolf==0){
if(u<l)continue;

dfs(u,wolf);

}else{
if(u>r)continue;

dfs(u,wolf);

}

}

if(wolf==0 && state[node][1]==false && node<=r){

state[node][1]=true;
wolf=1;

for(auto u:adj[node]){
if(state[u][wolf]==true)continue;

if(u>r)continue;

dfs(u,wolf);

}




}




}

std::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) {
	int Q = S.size(),m=(int)X.size(), i,j;

	for(i=0;i<m;i++){
	adj[X[i]].pb(Y[i]);
	adj[Y[i]].pb(X[i]);
	}

	int s;
	std::vector<int> A(Q);
	for(i=0;i<Q;i++){

	s=S[i]; e=E[i]; l=L[i]; r=R[i];

	for(j=0;j<N;j++){
	state[j][0]=false; state[j][1]=false;
	}

	A[i]=0;

	if(s>=l){
	dfs(s,0);

	if(state[e][1]==true)A[i]=1;

	}
//cout<<endl<<endl;


}
  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...