Submission #1756018


Source Code Expand

//#define __USE_MINGW_ANSI_STDIO 0
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<ll> VL;
typedef vector<VL> VVL;
typedef pair<int, int> PII;

#define FOR(i, a, n) for (ll i = (ll)a; i < (ll)n; ++i)
#define REP(i, n) FOR(i, 0, n)
#define ALL(x) x.begin(), x.end()
#define IN(a, b, x) (a<=x&&x<b)
#define MP make_pair
#define PB push_back
#ifdef int
const ll INF = (1LL<<60);
#else
const int INF = (1LL<<30);
#endif
const double PI = 3.14159265359;
const double EPS = 1e-12;
const int MOD = 1000000007;

template <typename T> T &chmin(T &a, const T &b) { return a = min(a, b); }
template <typename T> T &chmax(T &a, const T &b) { return a = max(a, b); }

int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

#define MAX_N 100010
#define MAX_LOG_N 30

VI G[MAX_N];  //グラフの隣接リスト
int root = 0;     //根のノード

int parent[MAX_LOG_N][MAX_N];
int depth[MAX_N];

void dfs(int v, int p, int d) {
  parent[0][v] = p;
  depth[v] = d;
  REP(i, G[v].size()) if(G[v][i] != p) dfs(G[v][i], v, d+1);
}

//初期化 O(logn)
void init(int n) {
  dfs(root, -1, 0);
  REP(k, MAX_LOG_N-1) REP(v, n) {
    if(parent[k][v] < 0) parent[k+1][v] = -1;
    else parent[k+1][v] = parent[k][parent[k][v]];
  }
}

// uとvのlcaを求める
int lca(int u, int v) {
  if(depth[u] > depth[v]) swap(u, v);
  REP(k, MAX_LOG_N) {
    if((depth[v]-depth[u]) >> k & 1) v = parent[k][v];
  }
  if(u == v) return u;
  for(int k = MAX_LOG_N-1; k>=0; k--) {
    if(parent[k][u] != parent[k][v]) {
      u = parent[k][u];
      v = parent[k][v];
    }
  }
  return parent[0][u];
}

signed main(void)
{
  int n;
  cin >> n;
  REP(i, n-1) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    G[x].PB(y);
    G[y].PB(x);
  }
  init(n);

  int q;
  cin >> q;
  REP(i, q) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    int c = lca(a, b);
    cout << depth[a] - depth[c] + depth[b] - depth[c] + 1 << endl;
  }

  return 0;
}

Submission Info

Submission Time
Task D - 閉路
User ferin_tech
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2101 Byte
Status AC
Exec Time 484 ms
Memory 36864 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 12
AC × 27
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
Subtask1 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt
Subtask2 subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 7 ms 24832 KB
subtask0_sample02.txt AC 7 ms 24832 KB
subtask0_sample03.txt AC 7 ms 24832 KB
subtask1_01.txt AC 78 ms 36224 KB
subtask1_02.txt AC 78 ms 36224 KB
subtask1_03.txt AC 7 ms 24832 KB
subtask1_04.txt AC 7 ms 24832 KB
subtask1_05.txt AC 7 ms 24832 KB
subtask1_06.txt AC 7 ms 24832 KB
subtask1_07.txt AC 88 ms 30592 KB
subtask1_08.txt AC 89 ms 30464 KB
subtask1_09.txt AC 89 ms 30464 KB
subtask1_10.txt AC 90 ms 30464 KB
subtask1_11.txt AC 90 ms 30464 KB
subtask1_12.txt AC 90 ms 30464 KB
subtask2_01.txt AC 288 ms 36864 KB
subtask2_02.txt AC 299 ms 36736 KB
subtask2_03.txt AC 214 ms 24960 KB
subtask2_04.txt AC 230 ms 24960 KB
subtask2_05.txt AC 253 ms 25216 KB
subtask2_06.txt AC 255 ms 25216 KB
subtask2_07.txt AC 478 ms 30848 KB
subtask2_08.txt AC 484 ms 30720 KB
subtask2_09.txt AC 465 ms 30848 KB
subtask2_10.txt AC 467 ms 30848 KB
subtask2_11.txt AC 475 ms 30848 KB
subtask2_12.txt AC 472 ms 30848 KB