Submission #989761

#TimeUsernameProblemLanguageResultExecution timeMemory
989761OAleksaWerewolf (IOI18_werewolf)C++14
15 / 100
4043 ms47640 KiB
#include "werewolf.h"
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int N = 2e5 + 69;
/*
g++ werewolf.cpp werewolf.h grader.cpp
./a.out
*/
int p[N], sz[N];
vector<pair<int, int>> t[N];
vector<pair<int, int>> qs[N];
vector<int> g[N];
int root(int v) {
	if (p[v] == v)
		return v;
	return p[v] = root(p[v]);
}
vector<int> check_validity(int n, vector<int> u, vector<int> v, vector<int> s, vector<int> e, vector<int> l, vector<int> r) {
  int q = s.size();
  int m = u.size();
  vector<int> ans(q);
  vector<tuple<int, int, int>> edges;
  for (int i = 0;i < m;i++) {
  	++u[i], ++v[i];
  	g[u[i]].push_back(v[i]);
  	g[v[i]].push_back(u[i]);
  }
  for (int i = 0;i < q;i++) {
  	l[i]++, r[i]++;
  	s[i]++, e[i]++;
  }
  for (int i = 1;i <= n;i++) {
  	p[i] = i;
  	sz[i] = 1;
  }
  for (int i = 0;i < q;i++) 
  	qs[l[i]].push_back({r[i], i});
  for (int i = 0;i < m;i++) {
  	int a = u[i], b = v[i];
  	int c = min(a, b);
  	edges.push_back({c, a, b});
  }
  sort(edges.begin(), edges.end());
  int ptr = m - 1;
  for (int i = n;i >= 1;i--) {
  	while (ptr >= 0 && get<0>(edges[ptr]) >= i) {
  		int a = get<1>(edges[ptr]), b = get<2>(edges[ptr]);
  		ptr--;
  		int x = root(a), y = root(b);
  		if (x != y) {
  			if (sz[x] < sz[y])
  				swap(x, y);
  			sz[x] += sz[y];
  			p[y] = x;
  		}
  	}
  	for (auto j : qs[i]) {
  		int r = j.f, ind = j.s;
  		queue<int> q;
  		vector<int> vis(n + 1);
  		for (int k = 1;k <= n;k++) {
  			if (root(k) == root(s[ind]) && k >= i && k <= r) {
  				q.push(k);
  			}
  		}
  		while (!q.empty()) {
  			auto v = q.front();
  			q.pop();
  			vis[v] = 1;
  			for (auto u : g[v]) {
  				if (vis[u] || u > r)
  					continue;
  				vis[u] = 1;
  				q.push(u);
  			}
  		}
  		ans[ind] = vis[e[ind]];
  	}
  }
  return ans;
}
/*
6 6 3
5 1
1 2
2 5
1 3
3 4
0 3
4 2 1 2
4 2 2 2
5 4 3 4
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...