# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1255492 | mingga | Mergers (JOI19_mergers) | C++20 | 249 ms | 59332 KiB |
// Author: caption_mingle
#include "bits/stdc++.h"
using namespace std;
#define ln "\n"
#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define sz(x) ((int)(x).size())
#define ll long long
const int mod = 1e9 + 7;
const int inf = 2e9;
const int N = 5e5 + 7;
int h[N], n, k, a[N], par[N], pre[N], deg[N];
vector<int> g[N];
void dfs(int u, int p) {
for(int v : g[u]) {
if(v == p) continue;
par[v] = u;
h[v] = h[u] + 1;
dfs(v, u);
}
}
struct DSU {
vector<int> par;
int n;
DSU(int n) : n(n) {
par.resize(n + 1, 0);
for(int i = 1; i <= n; i++) par[i] = i;
}
int find(int u) {
return u == par[u] ? u : par[u] = find(par[u]);
}
void join(int u, int v) {
u = find(u), v = find(v);
if(u == v) return;
if(h[u] > h[v]) swap(u, v);
par[v] = u;
}
};
signed main() {
cin.tie(0) -> sync_with_stdio(0);
#define task ""
if(fopen(task ".INP", "r")) {
freopen(task ".INP", "r", stdin);
freopen(task ".OUT", "w", stdout);
}
cin >> n >> k;
for(int i = 1; i < n; i++) {
int u, v; cin >> u >> v;
g[u].pb(v);
g[v].pb(u);
}
dfs(1, 0);
DSU d(n);
for(int i = 1; i <= n; i++) {
cin >> a[i];
if(pre[a[i]]) {
int v = pre[a[i]];
int u = i;
while(u != v) {
if(h[u] < h[v]) swap(u, v);
d.join(u, par[u]);
u = d.find(par[u]);
}
}
pre[a[i]] = i;
}
for(int i = 1; i <= n; i++) {
for(int j : g[i]) {
if(d.find(i) != d.find(j)) deg[d.find(j)]++;
}
}
int ans = 0;
for(int i = 1; i <= n; i++) {
ans += (deg[i] == 1);
}
cout << (ans + 1) / 2 << ln;
cerr << "\nTime: " << clock() * 1000 / CLOCKS_PER_SEC;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |