Submission #497522

#TimeUsernameProblemLanguageResultExecution timeMemory
497522ryangohcaMergers (JOI19_mergers)C++17
100 / 100
730 ms69160 KiB
#include <bits/stdc++.h> #define pii pair<int, int> #define ti3 tuple<int, int, int> #define ti4 tuple<int, int, int, int> #define int long long // Honestly, I love you, to the mysterious (SinB) place ~ SinB, Sunny Summer using namespace std; int p[500005]; int fs(int x){ if (p[x] == x) return x; else return p[x] = fs(p[x]); } bool ss(int x, int y){ return fs(x) == fs(y); } void ms(int x, int y){ // x <- y if (ss(x, y)) return; p[fs(y)] = fs(x); } vector<int> adjlist[500005]; int tpar[500005], dep[500005]; void dfs(int x, int p, int d){ tpar[x] = p; dep[x] = d; for (auto i : adjlist[x]){ if (i == p) continue; dfs(i, x, d+1); } } int prvState[500005], deg[500005]; main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; for (int i = 0; i < n - 1; i++){ int a, b; cin >> a >> b; adjlist[a].push_back(b); adjlist[b].push_back(a); } dfs(1, -1, 0); iota(p, p+n+2, 0); for (int i = 1; i <= n; i++){ int x; cin >> x; if (prvState[x]){ int a = fs(i), b = fs(prvState[x]); while (!ss(a, b)){ if (dep[a] > dep[b]) swap(a, b); ms(tpar[b], b); b = fs(b); } } prvState[x] = i; } for (int i = 1; i <= n; i++){ for (auto j : adjlist[i]){ if (!ss(i, j)) deg[fs(i)]++; } } int cnt = 0; for (int i = 1; i <= n; i++){ if (deg[i] == 1) cnt++; } cout << (cnt + 1) / 2 << endl; }

Compilation message (stderr)

mergers.cpp:31:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   31 | main(){
      | ^~~~
#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...