Untitled
unknown
plain_text
6 months ago
1.4 kB
6
Indexable
#include <bits/stdc++.h> using namespace std; const int MAX_N = 100005; int n, k; vector<int> adj[MAX_N]; int a[MAX_N]; int c[MAX_N]; vector<vector<int> > hold; vector<int> cur; void backtrack(int i, int l) { if (i == n) { hold.push_back(cur); return; } for (int x = l + 1; x <= k; x++) { cur.push_back(x); backtrack(i + 1, x); cur.pop_back(); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen("SCORING.inp", "r", stdin); freopen("SCORING.out", "w", stdout); cin >> n >> k; for (int i = 1; i <= n - 1; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int u = 1; u <= n; u++) { cin >> a[u]; } backtrack(0, 0); int answer = 0; for (auto x : hold) { for (int i = 1; i <= n; i++) { c[i] = x[i - 1]; } do { bool check = true; for (int u = 1; u <= n; u++) { for (auto v : adj[u]) { if (a[u] > a[v]) { check &= (c[u] > c[v]); } } } answer += check; } while (next_permutation(c + 1, c + n + 1)); } cout << answer << '\n'; return 0; }
Editor is loading...
Leave a Comment