157232025-02-24 17:23:15TaxiradioÚtvonalakcpp17Futási hiba 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";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Futási hiba1ms508 KiB
2Futási hiba118ms50860 KiB
subtask20/15
3Elfogadva2ms820 KiB
4Elfogadva3ms1332 KiB
5Futási hiba7ms2868 KiB
6Elfogadva10ms5536 KiB
7Elfogadva52ms25628 KiB
8Elfogadva114ms50740 KiB
subtask30/15
9Futási hiba2ms820 KiB
10Futási hiba3ms1332 KiB
11Futási hiba6ms2748 KiB
12Futási hiba13ms5940 KiB
13Futási hiba59ms27508 KiB
14Futási hiba127ms54836 KiB
15Futási hiba230ms59956 KiB
subtask40/15
16Futási hiba3ms1332 KiB
17Futási hiba4ms2356 KiB
18Futási hiba12ms5560 KiB
19Futási hiba57ms25604 KiB
20Futási hiba105ms50872 KiB
subtask50/15
21Elfogadva1ms316 KiB
22Elfogadva1ms512 KiB
23Futási hiba2ms1076 KiB
24Hibás válasz2ms564 KiB
25Futási hiba2ms820 KiB
26Futási hiba2ms820 KiB
subtask60/40
27Futási hiba1ms316 KiB
28Futási hiba136ms50860 KiB
29Elfogadva2ms820 KiB
30Elfogadva3ms1332 KiB
31Futási hiba7ms2868 KiB
32Elfogadva10ms5536 KiB
33Elfogadva52ms25628 KiB
34Elfogadva114ms50740 KiB
35Futási hiba2ms820 KiB
36Futási hiba3ms1332 KiB
37Futási hiba6ms2748 KiB
38Futási hiba13ms5940 KiB
39Futási hiba59ms27508 KiB
40Futási hiba127ms54836 KiB
41Futási hiba230ms59956 KiB
42Futási hiba3ms1332 KiB
43Futási hiba4ms2356 KiB
44Futási hiba12ms5560 KiB
45Futási hiba57ms25604 KiB
46Futási hiba105ms50872 KiB
47Elfogadva1ms316 KiB
48Elfogadva1ms512 KiB
49Futási hiba2ms1076 KiB
50Hibás válasz2ms564 KiB
51Futási hiba2ms820 KiB
52Futási hiba2ms820 KiB
53Futási hiba174ms61232 KiB
54Futási hiba3ms1332 KiB
55Futási hiba6ms2868 KiB
56Elfogadva28ms5428 KiB
57Futási hiba59ms25520 KiB
58Futási hiba70ms30648 KiB
59Futási hiba175ms62516 KiB
60Elfogadva314ms51432 KiB
61Futási hiba105ms50860 KiB
62Futási hiba116ms50972 KiB