답안 #468728

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
468728 2021-08-29T13:40:54 Z paga2004 Mousetrap (CEOI17_mousetrap) C++17
0 / 100
458 ms 86512 KB
#include <bits/stdc++.h>

#define int long long

using namespace std;

#ifdef LOCAL
#define dbg(x) cerr << x << "\n";
#else
#define dbg(x)
#endif

const int INF = 1e17;

int n, t, m;
vector<int> scores;
vector<vector<int>> g;
vector<int> depths, parent;

pair<bool, int> dfs(int v, int p) {
  parent[v] = p;
  bool flag = (v == m);
  depths[v] = depths[p] + max(0ll, (int)g[v].size() - 2);
  if (v == t) {
    depths[v] = 0;
  }
  vector<int> besties;
  for (int w : g[v]) {
    if (w == p)
      continue;
    auto [f, s] = dfs(w, v);
    if (f) {
      flag = true;
      continue;
    }
    besties.push_back(s);
  }
  dbg("v: " << v << " flag " << flag << " besties: " << besties.size());
  sort(besties.begin(), besties.end());
  int score = max(1ll, (int)besties.size());
  if (besties.size() >= 2) {
    score += besties[besties.size() - 2];
  }
  if (flag)
    score--;
  if (v == m)
    score++;
  scores[v] = score;
  return {flag, score};
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> n >> t >> m;
  t--;
  m--;
  if (t == m) {
    cout << "0\n";
    exit(0);
  }

  g.resize(n);
  scores.resize(n);
  depths.resize(n);
  parent.resize(n);
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }

  dfs(t, t);
  /* dbg("scores"); */
  /* for (int i = 0; i < n; i++) { */
  /*   cout << scores[i] << " "; */
  /* } */
  /* cout << "\n"; */
  /* dbg("depths"); */
  /* for (int i = 0; i < n; i++) { */
  /*   cout << depths[i] << " "; */
  /* } */
  /* cout << "\n"; */

  int best = 0;
  while (parent[m] != m) {
    best = max(best, scores[m] + depths[parent[m]]);
    m = parent[m];
  }

  cout << best << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 458 ms 86512 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -