답안 #468743

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
468743 2021-08-29T14:02:28 Z paga2004 Mousetrap (CEOI17_mousetrap) C++17
0 / 100
398 ms 86428 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 = (int)besties.size();
  if (score == 0 && g[v].size() == 1)
    score = 1;
  if (besties.size() >= 2) {
    score += besties[besties.size() - 2];
  }
  if (m == v && besties.size() == 0)
    score = 0;
  if (v == t && flag)
    score = 0;
  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);
#ifdef LOCAL
  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";
#endif

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

  cout << best << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 0 ms 204 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 398 ms 86428 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 0 ms 204 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 0 ms 204 KB Output isn't correct
6 Halted 0 ms 0 KB -