Pagini recente » Cod sursa (job #3286848) | Cod sursa (job #1137134) | Cod sursa (job #3209833) | Cod sursa (job #741037) | Cod sursa (job #2484005)
#include <bits/stdc++.h>
#define Nmax 200005
using namespace std;
ifstream f("guvern.in");
ofstream g("guvern.out");
int N, ans;
vector<int> G[Nmax];
set<int> s;
int v[Nmax], pos[Nmax], dp[Nmax];
void DFS(int node, int father) {
s.insert(v[node]);
dp[node] = 1;
auto it = s.upper_bound(v[node]);
if (it != s.end()) dp[node] += dp[pos[*it]];
ans = max(ans, dp[node]);
for (auto son: G[node])
if (son != father) DFS(son, node);
s.erase(v[node]);
}
int main()
{
f >> N;
for (int i = 1; i < N; ++i) {
int x, y;
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
for (int i = 1; i <= N; ++i)
f >> v[i], pos[v[i]] = i;
DFS(1, 0);
g << ans << '\n';
return 0;
}