157222025-02-24 17:10:00TaxiradioÚtvonalakcpp17Time limit exceeded 45/1001.103s32632 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]);
        }
    }
}

int dfs2(int h , int v , int p , int e){
    v += cs[h];
    if(e == h)return v;
    for(int x : g2[h]){
        if(x == p)continue;
        int k = dfs2(x , v , h , e);
        if(k!= -1)return k;
    }
    return -1;
}


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);
    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);
    for(int i = 0; i < q; i++){
        int a , b; cin >> a >> b;a--;b--;
        cout << dfs2(c[a] , 0 , -1, c[b])+d[a]+d[b]-2 << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms508 KiB
2Accepted109ms16300 KiB
subtask215/15
3Accepted2ms564 KiB
4Accepted3ms748 KiB
5Accepted4ms1348 KiB
6Accepted8ms1848 KiB
7Accepted39ms8212 KiB
8Accepted75ms16428 KiB
subtask30/15
9Accepted3ms564 KiB
10Accepted8ms820 KiB
11Accepted46ms1660 KiB
12Accepted180ms2356 KiB
13Time limit exceeded1.1s10292 KiB
14Time limit exceeded1.101s20276 KiB
15Time limit exceeded1.09s32308 KiB
subtask415/15
16Accepted4ms564 KiB
17Accepted6ms1076 KiB
18Accepted12ms1992 KiB
19Accepted48ms8368 KiB
20Accepted116ms16300 KiB
subtask515/15
21Accepted1ms496 KiB
22Accepted1ms500 KiB
23Accepted3ms564 KiB
24Accepted1ms512 KiB
25Accepted2ms564 KiB
26Accepted2ms564 KiB
subtask60/40
27Accepted1ms512 KiB
28Accepted136ms16452 KiB
29Accepted2ms564 KiB
30Accepted3ms748 KiB
31Accepted4ms1348 KiB
32Accepted8ms1848 KiB
33Accepted39ms8212 KiB
34Accepted75ms16428 KiB
35Accepted3ms564 KiB
36Accepted8ms820 KiB
37Accepted46ms1660 KiB
38Accepted180ms2356 KiB
39Time limit exceeded1.1s10292 KiB
40Time limit exceeded1.101s20276 KiB
41Time limit exceeded1.09s32308 KiB
42Accepted4ms564 KiB
43Accepted6ms1076 KiB
44Accepted12ms1992 KiB
45Accepted48ms8368 KiB
46Accepted116ms16300 KiB
47Accepted1ms496 KiB
48Accepted1ms500 KiB
49Accepted3ms564 KiB
50Accepted1ms512 KiB
51Accepted2ms564 KiB
52Accepted2ms564 KiB
53Time limit exceeded1.083s30260 KiB
54Accepted4ms564 KiB
55Accepted109ms1740 KiB
56Accepted26ms2104 KiB
57Accepted189ms8624 KiB
58Accepted101ms9912 KiB
59Time limit exceeded1.103s32632 KiB
60Accepted239ms16812 KiB
61Time limit exceeded1.077s16812 KiB
62Time limit exceeded1.09s16816 KiB