Submission #293735

#TimeUsernameProblemLanguageResultExecution timeMemory
293735TheLoraxWerewolf (IOI18_werewolf)C++11
0 / 100
4066 ms27092 KiB
#include <bits/stdc++.h> #include "werewolf.h" #define F first #define S second #define SZ(a) ((int)(a).size()) #define PB push_back #define ALL(a) (a).begin(), (a).end() using namespace std; typedef long long ll; typedef pair<ll, ll> ii; struct UF{ std::vector<int> p; UF(int n){ p.resize(n); iota(p.begin(), p.end(), 0); } int root(int a){ if(a==p[a]) return a; return (p[a]=root(p[a])); } bool find(int a, int b) { return root(a)==root(b); } void connect(int a, int b) { p[root(a)]=root(b); } }; 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 = SZ(x); std::vector<ii> eld(m), eli(m); for(int i=0; i<n; i++){ if(x[i]>y[i]) swap(x[i],y[i]); eld[i]={x[i],y[i]}; eli[i]={y[i],x[i]}; } sort(ALL(eli)); sort(ALL(eld)); reverse(ALL(eld)); std::vector<int> a(q,0); for(int t=0; t<q; t++){ UF h(n), w(n); for(int i=0; i<m && eld[i].F>=l[t]; i++){ h.connect(eld[i].F, eld[i].S); // fprintf(stderr, "%d ", eld[i].F); } // fprintf(stderr, "\n"); for(int i=0; i<m && eli[i].F<=r[t]; i++){ w.connect(eli[i].F,eli[i].S); // fprintf(stderr, "%d ", eli[i].F); } // fprintf(stderr, "\n"); for(int i=l[t]; i<=r[t]; i++){ a[t]|=(h.find(s[t],i)&&w.find(e[t],i)); // fprintf(stderr, "%d %d\n", i, a[t]); } } 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...