157242025-02-24 17:27:16TaxiradioÚtvonalakcpp17Accepted 100/100472ms64052 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
#include <ios>
using namespace std;

#define int int64_t

vector<vector<int>> g , g2;
vector<int> c , l , vis , cs;
vector<bool> d;

stack<int> e;

int t = 0 , ci;

void dfs(int h , int p){
    e.push(h);
    l[h] = vis[h] = t++;
    for(int x : g[h]){
        if(x == p)continue;
        if(vis[x] == -1){
            dfs(x , h);
            if(l[x] >= vis[h]){
                d[h] = 1;
                c[h] = h;
                cs[h] = -1;
                cs[ci]++;
                g2[ci].push_back(h);
                g2[h].push_back(ci);
                while(1){
                    cs[ci]++;
                    if(!d[e.top()]){
                        c[e.top()] = ci;
                    }else{
                        g2[ci].push_back(e.top());
                        g2[e.top()].push_back(ci);
                    }
                    if(e.top() == x){
                        e.pop();
                        break;
                    }
                    e.pop();
                }
                ci++;
            }
            l[h] = min(l[h] , l[x]);
        }else{
            l[h] = min(l[h] , vis[x]);
        }
    }
}

vector<array<int , 20>> bl;
vector<int> u , z;

void bls(int h , int p){
    if(p == -1){
        u[h] = 0;
        z[h] = cs[h];
    }else{
        u[h] = u[p]+1; 
        z[h] = cs[h] + z[p];
    } 
    bl[h][0] = p;
    for(int i = 1; i < 20; i++){
        if(bl[h][i-1] == -1)bl[h][i] = -1;else bl[h][i] = bl[bl[h][i-1]][i-1];
    }
    for(int x : g2[h]){
        if(x != p)bls(x , h);
    }
}

int lca(int a , int b){
    if(u[a] < u[b])swap(a , b);
    for(int i = 19; i>=0; i--){
        if((u[a]-u[b])&(1<<i))a = bl[a][i]; 
    }
    for(int i = 19; i>=0; i--){
        if(bl[a][i] != bl[b][i]){
            a = bl[a][i];
            b = bl[b][i];
        }
    }
    if(a==b)return a;
    return bl[a][0];
}


int32_t main() {
    ios_base::sync_with_stdio(0);
    cout.tie(0);
	int n , m , q; cin >> n >> m >> q;
    ci = n;
    g.resize(n);
    g2.resize(2*n);
    cs.resize(2*n);
    bl.resize(2*n);
    u.resize(2*n);
    z.resize(2*n);
    c.resize(n);
    l.resize(n);
    vis.resize(n , -1);
    d.resize(n , 0);
    for(int i = 0; i < m; i++){
        int a , b; cin >> a >> b;a--;b--;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    dfs(0 , -1);
    bls(0 , -1);
    for(int i = 0; i < q; i++){
        int a , b; cin >> a >> b;a--;b--;
        int w = lca(c[a] , c[b]);
        cout << z[c[a]]+z[c[b]]-2*z[w]+cs[w]+d[a]+d[b]-2 << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted119ms50860 KiB
subtask215/15
3Accepted2ms1004 KiB
4Accepted3ms1332 KiB
5Accepted6ms2868 KiB
6Accepted10ms5428 KiB
7Accepted50ms25520 KiB
8Accepted118ms50732 KiB
subtask315/15
9Accepted3ms820 KiB
10Accepted4ms1332 KiB
11Accepted7ms2612 KiB
12Accepted17ms5760 KiB
13Accepted85ms27644 KiB
14Accepted217ms54880 KiB
15Accepted437ms61520 KiB
subtask415/15
16Accepted4ms1332 KiB
17Accepted7ms2548 KiB
18Accepted13ms5428 KiB
19Accepted59ms25524 KiB
20Accepted136ms50924 KiB
subtask515/15
21Accepted1ms316 KiB
22Accepted1ms316 KiB
23Accepted2ms1076 KiB
24Accepted2ms564 KiB
25Accepted2ms820 KiB
26Accepted2ms820 KiB
subtask640/40
27Accepted1ms316 KiB
28Accepted128ms50728 KiB
29Accepted2ms1004 KiB
30Accepted3ms1332 KiB
31Accepted6ms2868 KiB
32Accepted10ms5428 KiB
33Accepted50ms25520 KiB
34Accepted118ms50732 KiB
35Accepted3ms820 KiB
36Accepted4ms1332 KiB
37Accepted7ms2612 KiB
38Accepted17ms5760 KiB
39Accepted85ms27644 KiB
40Accepted217ms54880 KiB
41Accepted437ms61520 KiB
42Accepted4ms1332 KiB
43Accepted7ms2548 KiB
44Accepted13ms5428 KiB
45Accepted59ms25524 KiB
46Accepted136ms50924 KiB
47Accepted1ms316 KiB
48Accepted1ms316 KiB
49Accepted2ms1076 KiB
50Accepted2ms564 KiB
51Accepted2ms820 KiB
52Accepted2ms820 KiB
53Accepted439ms61780 KiB
54Accepted4ms1332 KiB
55Accepted8ms2868 KiB
56Accepted27ms5492 KiB
57Accepted149ms25728 KiB
58Accepted85ms30752 KiB
59Accepted472ms64052 KiB
60Accepted308ms51372 KiB
61Accepted324ms51628 KiB
62Accepted305ms52044 KiB