Submission #430741

# Submission time Handle Problem Language Result Execution time Memory
430741 2021-06-17T03:13:49 Z albertolg101 Werewolf (IOI18_werewolf) C++17
15 / 100
4000 ms 73584 KB
#include <bits/stdc++.h>
#include "werewolf.h"
	
using namespace std;
using pii = pair<int, int>;
	
vector<int> is_a_graph (int n, vector<vector<int>> &g,
								std::vector<int> S, std::vector<int> E,
								std::vector<int> L, std::vector<int> R) {
	
	int Q = L.size(), m = g.size();
	vector<int> ans;
	
	vector<vector<int>> dp;
	vector<vector<bool>> flag;
	
	function<bool(int, int, int, int, int)> dfs = [&](int nod, bool race, int target, int l, int r)
	{
		if(flag[nod][race])
			return dp[nod][race];
	
		flag[nod][race] = true;
		if(!race and l <= nod and nod <= r)
			dp[nod][race] = dfs(nod, true, target, l, r);
	
		if(nod == target)
			return (dp[nod][race] | race);
	
		for(auto i: g[nod])
		{
			if(!race and l <= i)
				dp[nod][race] |= dfs(i, race, target, l, r); 
			
			if(race and i <= r)
				dp[nod][race] |= dfs(i, race, target, l, r);
		}
	
		return dp[nod][race];
	};
	
	for(int i = 0 ; i < Q ; i++)
	{
		dp = vector<vector<int>> (n, vector<int> (2, 0));
		flag = vector<vector<bool>> (n, vector<bool> (2, false));
		ans.push_back(dfs(S[i], false, E[i], L[i], R[i]));
	}
	
	return ans;
}
	
vector<int> is_a_line (int n, vector<vector<int>> g,
								std::vector<int> S, std::vector<int> E,
								std::vector<int> L, std::vector<int> R) {
	
	int Q = L.size();
	vector<int> cc(n), ans;
	
	function<void(int, int)> dfs = [&](int nod, int father)
	{
		for(auto i: g[nod])
		{
			if(i != father)
			{
				cc[i] = cc[nod] + 1;
				dfs(i, nod);
			}
		}
	};
	
	for(int i = 0 ; i < n ; i++)
	{
		if(g[i].size() == 1)
		{
			dfs(i, -1);
			break;
		}
	}
	
	vector<int> rcc(n);
	
	for(int i = 0 ; i < n ; i++)
		rcc[cc[i]] = i;
	
	vector<vector<int>> rminq(n, vector<int> (18)), rmaxq = rminq;
	
	for(int i = 0 ; i < cc.size() ; i++)
	{
		rminq[i][0] = cc[i];
		rmaxq[i][0] = cc[i];
	}
	
	for(int i = 1 ; (1<<i) < n ; i++)
	{
		for(int j = 0 ; j + (1<<i) - 1 < n ; j++)
		{
			rminq[j][i] = min(rminq[j][i-1], rminq[j+(1<<(i-1))][i-1]);
			rmaxq[j][i] = max(rmaxq[j][i-1], rmaxq[j+(1<<(i-1))][i-1]);
		}
	}
	
	function<pii(int, int)> query = [&](int l, int r)
	{
		int lg = __lg(r-l+1);
		return (pii){
			min(rminq[l][lg], rminq[r-(1<<lg)+1][lg]),
			max(rmaxq[l][lg], rmaxq[r-(1<<lg)+1][lg])
		};
	};
	
	for(int i = 0 ; i < Q ; i++)
	{
		int s = rcc[S[i]], e = rcc[E[i]], l = L[i], r = R[i];
	
		bool sol = (e < s);
		if(e < s)
			swap(s, e);
	
		for(int i = 18 ; i >= 0 ; i--)
		{
			int target = s + (1<<i);
	
			if(target > e)
				continue;
	
			if(!sol and l <= query(s+1, target).first)
				s = target;
			
			if(sol and query(s+1, target).second <= r)
				s = target;
		}
	
		if(!sol)
			ans.push_back(query(s, e).second <= r);
	
		else
			ans.push_back(l <= query(s, e).first);
	
		cout << ans.back() << endl ;
	}
	
	return ans ;
}
	
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 = L.size(), m = X.size(), maxDegree = 0;
	vector<int> ans;
	vector<vector<int>> g(n);
	
	for(int i = 0 ; i < m ; i++)
	{
		g[X[i]].push_back(Y[i]);
		g[Y[i]].push_back(X[i]);
	
		maxDegree = max({
			maxDegree, 
			(int)g[X[i]].size(), 
			(int)g[Y[i]].size()
		});
	}
	
	//if(maxDegree > 2)
		return is_a_graph(n, g, S, E, L, R);
	
	//else
	//	return is_a_line(n, g, S, E, L, R);
}

Compilation message

werewolf.cpp: In function 'std::vector<int> is_a_graph(int, std::vector<std::vector<int> >&, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:11:20: warning: unused variable 'm' [-Wunused-variable]
   11 |  int Q = L.size(), m = g.size();
      |                    ^
werewolf.cpp: In function 'std::vector<int> is_a_line(int, std::vector<std::vector<int> >, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:86:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |  for(int i = 0 ; i < cc.size() ; i++)
      |                  ~~^~~~~~~~~~~
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:148:6: warning: unused variable 'Q' [-Wunused-variable]
  148 |  int Q = L.size(), m = X.size(), maxDegree = 0;
      |      ^
# Verdict Execution time Memory Grader output
1 Correct 4 ms 332 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 2 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 3 ms 204 KB Output is correct
6 Correct 3 ms 332 KB Output is correct
7 Correct 3 ms 284 KB Output is correct
8 Correct 3 ms 332 KB Output is correct
9 Correct 3 ms 332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 332 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 2 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 3 ms 204 KB Output is correct
6 Correct 3 ms 332 KB Output is correct
7 Correct 3 ms 284 KB Output is correct
8 Correct 3 ms 332 KB Output is correct
9 Correct 3 ms 332 KB Output is correct
10 Correct 1969 ms 1484 KB Output is correct
11 Correct 1644 ms 1356 KB Output is correct
12 Correct 1124 ms 1776 KB Output is correct
13 Correct 1848 ms 1512 KB Output is correct
14 Correct 1718 ms 1380 KB Output is correct
15 Correct 1904 ms 1756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 4053 ms 73584 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 332 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 2 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 3 ms 204 KB Output is correct
6 Correct 3 ms 332 KB Output is correct
7 Correct 3 ms 284 KB Output is correct
8 Correct 3 ms 332 KB Output is correct
9 Correct 3 ms 332 KB Output is correct
10 Correct 1969 ms 1484 KB Output is correct
11 Correct 1644 ms 1356 KB Output is correct
12 Correct 1124 ms 1776 KB Output is correct
13 Correct 1848 ms 1512 KB Output is correct
14 Correct 1718 ms 1380 KB Output is correct
15 Correct 1904 ms 1756 KB Output is correct
16 Execution timed out 4053 ms 73584 KB Time limit exceeded
17 Halted 0 ms 0 KB -