Submission #1245685

#TimeUsernameProblemLanguageResultExecution timeMemory
1245685porquenomedejainiciarsesionWerewolf (IOI18_werewolf)C++20
0 / 100
1045 ms589824 KiB
#include "werewolf.h" #include <bits/stdc++.h> using namespace std; vector<int> V; vector<vector<int>> adj; vector<vector<int>> T; int n; void dfs(int cur,int prev){ V.push_back(cur); for(auto x:adj[cur]){ if(x!=prev){ dfs(x,cur); } } } void build(int i,int l,int r){ if(l==r){ T[i]={V[l]}; return; } int m=(l+r)/2; build(2*i+1,l,m); build(2*i+2,m+1,r); merge(T[2*i+1].begin(),T[2*i+1].end(),T[2*i+2].begin(),T[2*i+2].end(),back_inserter(T[i])); } int query(int i,int tl,int tr,int l,int r,int x){ if(tl>=l && tr<=r){ int ans=upper_bound(T[i].begin(),T[i].end(),x)-T[i].begin(); return ans; } if(tl>r || tr<l){ return 0; } int m=(tl+tr)/2; return query(2*i+1,tl,m,l,r,x)+query(2*i+2,m+1,tr,l,r,x); } int qu(int l,int r,int x){ return query(0,0,n-1,l,r,x); } vector<int> check_validity(int N,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(); unordered_map<int,int> M,M1; adj.resize(N); n=N; for(int i=0;i<X.size();i++){ M[X[i]]++; M[Y[i]]++; adj[X[i]].push_back(Y[i]); adj[Y[i]].push_back(X[i]); } int start; for(auto x:M){ if(x.second==1){ start=x.first; break; } } dfs(0,-1); T.resize(4*N); vector<int> ans; build(0,0,n-1); for(int i=0;i<V.size();i++){ M1[V[i]]=i; } for(int i=0;i<S.size();i++){ int a=M1[S[i]]; int b=M1[E[i]]; if(a>b){ swap(a,b); } int c=qu(a,b,L[i]-1); int d=qu(a,b,R[i]); if(c>1){ ans.push_back(0); continue; }else if(c<1){ if(d>0){ ans.push_back(1); }else{ ans.push_back(0); } }else{ ans.push_back(1); continue; } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...