Submission #246366

# Submission time Handle Problem Language Result Execution time Memory
246366 2020-07-08T22:54:52 Z xiryss Uzastopni (COCI15_uzastopni) C++17
88 / 160
500 ms 1280 KB
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("fast-math")
/*#pragma GCC optimize("section-anchors")
#pragma GCC optimize("profile-values,profile-reorder-functions,tracer")
#pragma GCC optimize("vpt")
#pragma GCC optimize("rename-registers")
#pragma GCC optimize("move-loop-invariants")
#pragma GCC optimize("unswitch-loops")
#pragma GCC optimize("function-sections")
#pragma GCC optimize("data-sections")
#pragma GCC optimize("branch-target-load-optimize")
#pragma GCC optimize("branch-target-load-optimize2")
#pragma GCC optimize("btr-bb-exclusive")*/
//#pragma comment(linker, "/STACK:367077216")
#define _CRT_SECURE_NO_WARNINGS
#include <chrono>
#include <set>
#include <map>
#include <deque>
#include <string>
#include <cstdint>
#include <cmath>
#include <queue>
#include <cassert>
#include <random>
#include <bitset>
#include <iomanip>
#include <numeric>
#include <time.h>//////////////
#include <ctime>
#include <string>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
//++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
//#define endl '\n'
#define mp make_pair
#define pbc push_back
#define pob pop_back()
#define empb emplace_back
#define queuel queue<long long>
#define sqr(a) ((a) * (a))
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define pin(p) cin >> p.first >> p.second;
#define uniq(a) sort(all(a));(a).resize(unique(all(a)) - a.begin());
#define rev(v) reverse(v.begin(), v.end());
#define sout(s, c) for (auto i : s) cout << i << c;
#define pout(p) cout << p.first << " " << p.second;
#define er(v, l, r) erase(v.begin() + l, v.begin() + r);
#define vin(v) for (ll i = 0; i < v.size(); ++i) cin >> v[i];
#define vout(v, c) for (int i = 0; i < v.size(); ++i) cout << v[i] << c;
#define pushi(v, a) for (int i = 0; i < a.size(); ++i) v.push_back(a[i]);
#define fastio() ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); srand(time(NULL))
#define dab(v) for(auto i:v)cout<<i<<' ';
#define sp system("pause")
//++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
using namespace std;
//++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
//++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
mt19937 rnd(time(0) + 228 + 'k' + 'e' + 'k' + 'e' + 'r' + 'o' + 'f' + 'e' + 'y');
const ld EPS = 1e-5;//(cos,-sin), (sin, cos)
bool checkprime(int x)
{
	for (int i = 2; i * i <= x; ++i) if (x % i == 0) return 0;
	return 1;
}
const ld PI = acos(-1);
const int MOD7 = 1000000007;
const int MOD9 = 1000000009;
const ll INF = 1e18;
int mod = MOD7;
const int inf = 1e9;
const int MAXN = 2e4 + 1;
vector<int> g[MAXN];
int a[MAXN];
int n;
const int MAXV = 101;
pair<int, int> now;
int ans = 0;
int used[MAXV];
inline bool bel(pair<int, int> a, int b)
{
	return b >= a.first && b <= a.second;
}
bool keked[MAXN];
void dfs(int v)
{
	if (!bel(now, a[v])) return;
	used[a[v]] = 1;
//	keked[v] = 1;
	int nw = 1;
	for (int i : g[v])
	{
		if (!bel(now, a[i])) continue;
		if (a[i] >= a[v] && a[i] <= a[v] + nw)
		{
			if (a[i] == a[v] + nw) ++nw;
			dfs(i);
		}
	}
	rev(g[v]);
	nw = 1;
	for (int i : g[v])
	{
		if (a[i] <= a[v] && !keked[i] && a[i] >= a[v] - nw)
		{
			if (a[i] == a[v] - nw) ++nw;
			dfs(i);
		}
	}
	rev(g[v]);
}
signed main()
{
	fastio();
	cin >> n;
	for (int i = 1; i <= n; ++i) cin >> a[i];
	for (int i = 0; i < n - 1; ++i)
	{
		int a, b;
		cin >> a >> b;
		g[a].pbc(b);
	}
	for (int i = 1; i <= n; ++i)
	{
		sort(all(g[i]), [&](int aa, int bb) {return a[aa] < a[bb]; });
	}
	for (int fs = 1; fs < MAXV; ++fs)
	{
		for (int ss = fs; ss <= MAXV; ++ss)
		{
			fill(keked, keked + MAXN, 0);
			fill(used, used + MAXV, 0);

			now = { fs,ss };
			dfs(1);
			if (count(used, used + MAXV, 1) == ss - fs + 1)
			{
				++ans;
			}
		}
	}
	cout << ans;
	//sp;
}
# Verdict Execution time Memory Grader output
1 Incorrect 46 ms 896 KB Output isn't correct
2 Correct 48 ms 896 KB Output is correct
3 Incorrect 50 ms 896 KB Output isn't correct
4 Incorrect 46 ms 768 KB Output isn't correct
5 Incorrect 47 ms 896 KB Output isn't correct
6 Correct 47 ms 896 KB Output is correct
7 Correct 48 ms 896 KB Output is correct
8 Correct 47 ms 896 KB Output is correct
9 Incorrect 47 ms 768 KB Output isn't correct
10 Incorrect 55 ms 896 KB Output isn't correct
11 Incorrect 49 ms 1152 KB Output isn't correct
12 Correct 48 ms 1144 KB Output is correct
13 Correct 62 ms 1152 KB Output is correct
14 Correct 48 ms 1280 KB Output is correct
15 Correct 48 ms 1280 KB Output is correct
16 Correct 50 ms 1280 KB Output is correct
17 Correct 103 ms 1152 KB Output is correct
18 Correct 55 ms 1152 KB Output is correct
19 Execution timed out 1062 ms 1024 KB Time limit exceeded
20 Execution timed out 1097 ms 1024 KB Time limit exceeded