답안 #468709

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
468709 2021-08-29T13:03:13 Z paga2004 Mousetrap (CEOI17_mousetrap) C++14
0 / 100
5000 ms 86336 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;

int dfs1(int v, int p) {
  parent[v] = p;
  bool flag = false;
  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;
    int thisscore = dfs1(w, v);
    if (thisscore < 0) {
      flag = true;
      continue;
    }
    besties.push_back(dfs1(w, v));
  }
  sort(besties.begin(), besties.end());
  int score = besties.size();
  if (v == t) {
    score = 0;
  }
  if (besties.size() >= 2) {
    score += besties[besties.size() - 2];
  }
  if (flag)
    score--;
  scores[v] = score;
  if (v == m || flag) {
    return -(score);
  }
  return 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);
  }

  dfs1(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 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5097 ms 86336 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -