Submission #230711


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);
    }
    root = maxi;
    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 2046 Byte
Status WA
Exec Time 838 ms
Memory 19108 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 0 / 30 0 / 70
Status
AC × 2
WA × 1
AC × 5
WA × 7
AC × 9
WA × 18
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 32 ms 3232 KB
subtask0_sample02.txt WA 29 ms 3192 KB
subtask0_sample03.txt AC 30 ms 3168 KB
subtask1_01.txt AC 172 ms 19092 KB
subtask1_02.txt WA 171 ms 19108 KB
subtask1_03.txt AC 29 ms 3168 KB
subtask1_04.txt AC 28 ms 3232 KB
subtask1_05.txt WA 29 ms 3296 KB
subtask1_06.txt WA 29 ms 3356 KB
subtask1_07.txt AC 221 ms 14504 KB
subtask1_08.txt AC 217 ms 14504 KB
subtask1_09.txt WA 224 ms 14496 KB
subtask1_10.txt WA 226 ms 14492 KB
subtask1_11.txt WA 217 ms 14500 KB
subtask1_12.txt WA 212 ms 14500 KB
subtask2_01.txt AC 529 ms 19104 KB
subtask2_02.txt WA 558 ms 19108 KB
subtask2_03.txt AC 364 ms 3236 KB
subtask2_04.txt WA 365 ms 3356 KB
subtask2_05.txt WA 427 ms 3240 KB
subtask2_06.txt WA 446 ms 3356 KB
subtask2_07.txt WA 802 ms 14500 KB
subtask2_08.txt WA 811 ms 14504 KB
subtask2_09.txt WA 803 ms 14500 KB
subtask2_10.txt WA 838 ms 14480 KB
subtask2_11.txt WA 835 ms 14492 KB
subtask2_12.txt WA 833 ms 14504 KB