Submission #133157

#TimeUsernameProblemLanguageResultExecution timeMemory
133157SirCenessMergers (JOI19_mergers)C++14
0 / 100
3035 ms35764 KiB
#include <bits/stdc++.h> using namespace std; #define mod 1000000007 #define mp make_pair #define pb push_back #define bas(x) #x << ": " << x << " " #define prarr(x, n) cout << #x << ": "; for (int qsd = 0; qsd < n; qsd++) cout << x[qsd] << " "; cout << endl; #define prarrv(x) cout << #x << ": "; for (int qsd = 0; qsd < (int)x.size(); qsd++) cout << x[qsd] << " "; cout << endl; #define inside sl<=l&&r<=sr #define outside sr<l||r<sl using ll = long long; int n, k; list<int> adj[500005]; int ilk[500005]; int son[500005]; list<int> st[500005]; int dfs(int node, int ata, int state){ //cout << "dfs(" << node << ", " << ata << ", " << state << ")" << endl; int ret = (son[ilk[node]] == state); for (int ch: adj[node]){ if (ch == ata) continue; if (dfs(ch, node, state)){ ret = 1; if (son[ilk[node]] > state) son[state] = son[ilk[node]]; } } return ret; } int main(){ cin >> n >> k; for (int i = 0; i < n-1; i++){ int u, v; cin >> u >> v; u--; v--; adj[u].pb(v); adj[v].pb(u); } for (int i = 0; i < n; i++){ cin >> ilk[i]; ilk[i]--; st[ilk[i]].pb(i); } for (int i = 0 ; i < k; i++) son[i] = i; for (int i = 0; i < k; i++){ if (st[i].size() != 0) dfs(*st[i].begin(), -1, i); } int ans = 0; vector<int> say(k, 0); for (int i = 0; i < n; i++){ for (int j: adj[i]){ if (son[ilk[i]] != son[ilk[j]]){ //cout << "artir" << bas(i) << bas(j) << endl; say[son[ilk[i]]]++; //say[son[ilk[j]]]++; } } } //for (int i = 0; i < n; i++) cout << son[ilk[i]] << " "; cout << endl; for (int i = 0; i < k; i++) if (say[i] == 1) ans++; cout << (ans+1)/2 << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...