Submission #230692


Source Code Expand

#include <algorithm>
#include <functional>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <bitset>
#include <climits>

#define all(c) (c).begin(), (c).end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define pb(e) push_back(e)
#define mp(a, b) make_pair(a, b)
#define fr first
#define sc second

const int INF=100000000;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
using namespace std;
typedef pair<int ,int > P;
typedef long long ll;
int N;
vector<int> G[100005];
int d[100005];
int root;
int parent[20][100005];
int depth[100005];
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);
    }
}
void init(int v) {
    for(int k=0;k+1<20;k++) {
        if(parent[k][v]<0) parent[k+1][v]=-1;
        else parent[k+1][v] = parent[k][parent[k][v]];

    }
}

int lca(int u,int v) {
    if(depth[u] > depth[v]) swap(u,v);

    rep(k,20) {
        if((depth[v]-depth[u])>>k &1) {
            v=parent[k][v];
        }
    }
    if(u==v) return u;
    for(int k=20-1;k>=0;k--) {
        if(parent[k][u]!=parent[k][v]) {
            u=parent[k][u];
            v=parent[k][v];
        }
    }

    return parent[0][u];
}

int main() {
    cin>>N;
    int maxi = 0;
    rep(i,N-1) {
        int x,y;
        cin>>x>>y;
        G[x].pb(y);
        G[y].pb(x);
        root = x;
        maxi=max(max(maxi,x),y);
    }
    dfs(root,-1,0);
    rep(i,maxi+1) init(i);
    int Q;
    cin>>Q;
    rep(i,Q) {
        int a,b;
        cin>>a>>b;
        int v=lca(a,b);
        int ans = depth[a]+depth[b]-depth[v]*2+1;
        //cout<<v<<endl;
        //cout<<depth[a]<<","<<depth[b]<<","<<depth[v]<<endl;
        cout<<ans<<endl;

    }
    return 0;
}

Submission Info

Submission Time
Task D - 閉路
User odan
Language C++ (G++ 4.6.4)
Score 0
Code Size 2028 Byte
Status WA
Exec Time 749 ms
Memory 19112 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 0 / 30 0 / 70
Status
AC × 3
AC × 3
WA × 9
AC × 7
WA × 20
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 36 ms 3176 KB
subtask0_sample02.txt AC 34 ms 3240 KB
subtask0_sample03.txt AC 31 ms 3236 KB
subtask1_01.txt AC 186 ms 19104 KB
subtask1_02.txt WA 188 ms 19108 KB
subtask1_03.txt AC 30 ms 3104 KB
subtask1_04.txt WA 28 ms 3236 KB
subtask1_05.txt WA 31 ms 3232 KB
subtask1_06.txt WA 30 ms 3360 KB
subtask1_07.txt WA 202 ms 14496 KB
subtask1_08.txt AC 203 ms 14500 KB
subtask1_09.txt WA 202 ms 14496 KB
subtask1_10.txt WA 204 ms 14504 KB
subtask1_11.txt WA 204 ms 14500 KB
subtask1_12.txt WA 204 ms 14504 KB
subtask2_01.txt AC 580 ms 19104 KB
subtask2_02.txt WA 586 ms 19112 KB
subtask2_03.txt WA 349 ms 3108 KB
subtask2_04.txt WA 379 ms 3228 KB
subtask2_05.txt WA 419 ms 3232 KB
subtask2_06.txt WA 418 ms 3240 KB
subtask2_07.txt WA 722 ms 14500 KB
subtask2_08.txt WA 749 ms 14492 KB
subtask2_09.txt WA 710 ms 14428 KB
subtask2_10.txt WA 716 ms 14500 KB
subtask2_11.txt WA 703 ms 14496 KB
subtask2_12.txt WA 704 ms 14496 KB