157232025-02-24 17:23:15TaxiradioÚtvonalakcpp17Runtime error 0/100314ms62516 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 = 30; i>=0; i--){
        if((u[a]-u[b])&(1<<i))a = bl[a][i]; 
    }
    for(int i = 30; 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
1Runtime error1ms508 KiB
2Runtime error118ms50860 KiB
subtask20/15
3Accepted2ms820 KiB
4Accepted3ms1332 KiB
5Runtime error7ms2868 KiB
6Accepted10ms5536 KiB
7Accepted52ms25628 KiB
8Accepted114ms50740 KiB
subtask30/15
9Runtime error2ms820 KiB
10Runtime error3ms1332 KiB
11Runtime error6ms2748 KiB
12Runtime error13ms5940 KiB
13Runtime error59ms27508 KiB
14Runtime error127ms54836 KiB
15Runtime error230ms59956 KiB
subtask40/15
16Runtime error3ms1332 KiB
17Runtime error4ms2356 KiB
18Runtime error12ms5560 KiB
19Runtime error57ms25604 KiB
20Runtime error105ms50872 KiB
subtask50/15
21Accepted1ms316 KiB
22Accepted1ms512 KiB
23Runtime error2ms1076 KiB
24Wrong answer2ms564 KiB
25Runtime error2ms820 KiB
26Runtime error2ms820 KiB
subtask60/40
27Runtime error1ms316 KiB
28Runtime error136ms50860 KiB
29Accepted2ms820 KiB
30Accepted3ms1332 KiB
31Runtime error7ms2868 KiB
32Accepted10ms5536 KiB
33Accepted52ms25628 KiB
34Accepted114ms50740 KiB
35Runtime error2ms820 KiB
36Runtime error3ms1332 KiB
37Runtime error6ms2748 KiB
38Runtime error13ms5940 KiB
39Runtime error59ms27508 KiB
40Runtime error127ms54836 KiB
41Runtime error230ms59956 KiB
42Runtime error3ms1332 KiB
43Runtime error4ms2356 KiB
44Runtime error12ms5560 KiB
45Runtime error57ms25604 KiB
46Runtime error105ms50872 KiB
47Accepted1ms316 KiB
48Accepted1ms512 KiB
49Runtime error2ms1076 KiB
50Wrong answer2ms564 KiB
51Runtime error2ms820 KiB
52Runtime error2ms820 KiB
53Runtime error174ms61232 KiB
54Runtime error3ms1332 KiB
55Runtime error6ms2868 KiB
56Accepted28ms5428 KiB
57Runtime error59ms25520 KiB
58Runtime error70ms30648 KiB
59Runtime error175ms62516 KiB
60Accepted314ms51432 KiB
61Runtime error105ms50860 KiB
62Runtime error116ms50972 KiB