Submission #254809

#TimeUsernameProblemLanguageResultExecution timeMemory
254809arayiWerewolf (IOI18_werewolf)C++17
0 / 100
1155 ms392432 KiB
#include "werewolf.h"
//Arayi
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <algorithm>
#include <math.h>
#include <vector>
#include <cstring>
#include <ctime>
#include <set>
#include <bitset>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <ctime>
#include <climits>
#include <cassert>
#include <chrono>
#include <random>
#include <complex>

#define fr first
#define sc second
#define MP make_pair
#define ad push_back
#define PB push_back
#define fastio ios_base::sync_with_stdio(false); cin.tie(0);
#define lli long long int
#define y1 arayikhalatyan
#define j1 jigglypuff
#define ld long double
#define itn int
#define pir pair<int, int> 
#define all(x) (x).begin(), (x).end()
#define str string
#define enl endl
#define en endl
#define cd complex<long double>
#define vcd vector<cd>
#define vii vector<int>
#define vlli vector<lli>
using namespace std;

const int N = 2e6 + 30;
const lli mod = 1e9 + 7;
const ld pi = acos(-1);
const int T = 238;
const ld e = 1e-13;

int n, q;
vii g[N], l1[N], r1[N], pat, g1[N];
int p[N], sz[N], cll[N], clr[N], col[N];
set<int> fp[N];
int gp(int x)
{
	if (p[x] == x) return x;
	return p[x] = gp(p[x]);
}
void dfs(int v, int l, int r)
{
	cll[v] = l;
	clr[v] = r;
	if (v < n) return;
	int sm = 0;
	for (auto p : g1[v])
	{
		dfs(p, l + sm, l + sm + sz[p] - 1);
		sm += sz[p];
	}
}
vector<int> check_validity(int N, vector<int> X, vector<int> Y, vector<int> S, vector<int> E, vector<int> L, vector<int> R) 
{
	n = N;
	q = S.size();
	pat.resize(q);
	for (int i = 0; i < q; i++)
	{
		l1[L[i]].ad(i);
		r1[R[i]].ad(i);
	}
	for (int i = 0; i < X.size(); i++)
	{
		sz[i] = 1;
		g[X[i]].ad(Y[i]);
		g[Y[i]].ad(X[i]);
	}
	for (int i = 0; i < N; i++) p[i] = i;
	int i1 = n;
	for (int i = n - 1; i >= 0; i--)
	{
		p[i1] = i1;
		sz[i1] = sz[i];
		for (auto p1 : g[i])
		{
			if (p1 > i && gp(p1) != i1)
			{
				int y = gp(p1);
				sz[i1] += sz[y];
				p[y] = i1;
				g1[i1].ad(y);
			}
		}
		g1[i1].ad(i);
		p[i] = i1;
		i1++;
		for (auto p1 : l1[i])
			col[p1] = gp(S[p1]);
	}
	dfs(i1 - 1, 0, n - 1);
	for (int i = 0; i < n; i++) p[i] = i, fp[i].insert(cll[i]);
	for (int i = 0; i < n; i++)
	{
		int mx = 1, i1 = i;
		for (auto p1 : g[i])
		{
			if (p1 < i)
			{
				int y = gp(p1);
				if (fp[y].size() > mx)
				{
					mx = fp[y].size();
					i1 = y;
				}
			}
		}
		p[i] = i1;
		fp[i1].insert(cll[i]);
		for (auto p1 : g[i])
		{
			if (p1 < i && gp(p1) != i1)
			{
				int y = gp(p1);
				p[y] = i1;
				for (auto ii = fp[y].begin(); ii != fp[y].end(); ++ii)
					fp[i1].insert(*ii);
			}
		}
		for (auto p1 : r1[i])
		{
			int x = gp(E[p1]);
			int l = cll[col[p1]], r = clr[col[p1]];
			if (fp[x].lower_bound(l) != fp[x].end() && *fp[x].lower_bound(l) <= r)
			{
				pat[p1] = 1;
			}
			else
			{
				pat[p1] = 0;
			}
		}
	}
	return pat;
}

Compilation message (stderr)

werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:85:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < X.size(); i++)
                  ~~^~~~~~~~~~
werewolf.cpp:123:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (fp[y].size() > mx)
         ~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...