# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
199310 | MetB | Uzastopni (COCI15_uzastopni) | C++14 | 15 ms | 764 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define N 1000001
using namespace std;
typedef long long ll;
const ll INF = 1e18, MOD = 1e9 + 7, MOD2 = 1e6 + 3;
vector <int> g[100], gb[100];
bitset <101> d[100][100];
int vm = 101, v[100], n;
void dfs (int x) {
int ptr = 0;
for (int to : g[x]) {
dfs (to);
for (int i = 0; i < vm; i++) {
d[x][i] |= d[to][i];
}
}
for (int i = vm - 1; i >= 0; i--) {
for (int j = i + 1; j < vm; j++) {
if (d[x][i][j-1]) d[x][i] |= d[x][j];
}
}
for (int i = 1; i <= v[x]; i++)
for (int j = v[x]; j < vm; j++)
if ((i == v[x] or d[x][i][v[x] - 1]) and (j == v[x] or d[x][v[x] + 1][j]))
d[x][i][j] = 1;
for (int i = 0; i < vm; i++)
for (int j = i; j < vm; j++)
if (j < v[x] || v[x] < i) d[x][i][j] = 0;
}
int main () {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> v[i];
}
for (int i = 0; i < n - 1; i++) {
int a, b;
cin >> a >> b;
g[a-1].push_back (b - 1);
}
dfs (0);
int ans = 0;
for (int i = 0; i < vm; i++)
ans += d[0][i].count ();
cout << ans;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |