157242025-02-24 17:27:16TaxiradioÚtvonalakcpp17Elfogadva 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";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva119ms50860 KiB
subtask215/15
3Elfogadva2ms1004 KiB
4Elfogadva3ms1332 KiB
5Elfogadva6ms2868 KiB
6Elfogadva10ms5428 KiB
7Elfogadva50ms25520 KiB
8Elfogadva118ms50732 KiB
subtask315/15
9Elfogadva3ms820 KiB
10Elfogadva4ms1332 KiB
11Elfogadva7ms2612 KiB
12Elfogadva17ms5760 KiB
13Elfogadva85ms27644 KiB
14Elfogadva217ms54880 KiB
15Elfogadva437ms61520 KiB
subtask415/15
16Elfogadva4ms1332 KiB
17Elfogadva7ms2548 KiB
18Elfogadva13ms5428 KiB
19Elfogadva59ms25524 KiB
20Elfogadva136ms50924 KiB
subtask515/15
21Elfogadva1ms316 KiB
22Elfogadva1ms316 KiB
23Elfogadva2ms1076 KiB
24Elfogadva2ms564 KiB
25Elfogadva2ms820 KiB
26Elfogadva2ms820 KiB
subtask640/40
27Elfogadva1ms316 KiB
28Elfogadva128ms50728 KiB
29Elfogadva2ms1004 KiB
30Elfogadva3ms1332 KiB
31Elfogadva6ms2868 KiB
32Elfogadva10ms5428 KiB
33Elfogadva50ms25520 KiB
34Elfogadva118ms50732 KiB
35Elfogadva3ms820 KiB
36Elfogadva4ms1332 KiB
37Elfogadva7ms2612 KiB
38Elfogadva17ms5760 KiB
39Elfogadva85ms27644 KiB
40Elfogadva217ms54880 KiB
41Elfogadva437ms61520 KiB
42Elfogadva4ms1332 KiB
43Elfogadva7ms2548 KiB
44Elfogadva13ms5428 KiB
45Elfogadva59ms25524 KiB
46Elfogadva136ms50924 KiB
47Elfogadva1ms316 KiB
48Elfogadva1ms316 KiB
49Elfogadva2ms1076 KiB
50Elfogadva2ms564 KiB
51Elfogadva2ms820 KiB
52Elfogadva2ms820 KiB
53Elfogadva439ms61780 KiB
54Elfogadva4ms1332 KiB
55Elfogadva8ms2868 KiB
56Elfogadva27ms5492 KiB
57Elfogadva149ms25728 KiB
58Elfogadva85ms30752 KiB
59Elfogadva472ms64052 KiB
60Elfogadva308ms51372 KiB
61Elfogadva324ms51628 KiB
62Elfogadva305ms52044 KiB