157222025-02-24 17:10:00TaxiradioÚtvonalakcpp17Időlimit túllépés 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";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms508 KiB
2Elfogadva109ms16300 KiB
subtask215/15
3Elfogadva2ms564 KiB
4Elfogadva3ms748 KiB
5Elfogadva4ms1348 KiB
6Elfogadva8ms1848 KiB
7Elfogadva39ms8212 KiB
8Elfogadva75ms16428 KiB
subtask30/15
9Elfogadva3ms564 KiB
10Elfogadva8ms820 KiB
11Elfogadva46ms1660 KiB
12Elfogadva180ms2356 KiB
13Időlimit túllépés1.1s10292 KiB
14Időlimit túllépés1.101s20276 KiB
15Időlimit túllépés1.09s32308 KiB
subtask415/15
16Elfogadva4ms564 KiB
17Elfogadva6ms1076 KiB
18Elfogadva12ms1992 KiB
19Elfogadva48ms8368 KiB
20Elfogadva116ms16300 KiB
subtask515/15
21Elfogadva1ms496 KiB
22Elfogadva1ms500 KiB
23Elfogadva3ms564 KiB
24Elfogadva1ms512 KiB
25Elfogadva2ms564 KiB
26Elfogadva2ms564 KiB
subtask60/40
27Elfogadva1ms512 KiB
28Elfogadva136ms16452 KiB
29Elfogadva2ms564 KiB
30Elfogadva3ms748 KiB
31Elfogadva4ms1348 KiB
32Elfogadva8ms1848 KiB
33Elfogadva39ms8212 KiB
34Elfogadva75ms16428 KiB
35Elfogadva3ms564 KiB
36Elfogadva8ms820 KiB
37Elfogadva46ms1660 KiB
38Elfogadva180ms2356 KiB
39Időlimit túllépés1.1s10292 KiB
40Időlimit túllépés1.101s20276 KiB
41Időlimit túllépés1.09s32308 KiB
42Elfogadva4ms564 KiB
43Elfogadva6ms1076 KiB
44Elfogadva12ms1992 KiB
45Elfogadva48ms8368 KiB
46Elfogadva116ms16300 KiB
47Elfogadva1ms496 KiB
48Elfogadva1ms500 KiB
49Elfogadva3ms564 KiB
50Elfogadva1ms512 KiB
51Elfogadva2ms564 KiB
52Elfogadva2ms564 KiB
53Időlimit túllépés1.083s30260 KiB
54Elfogadva4ms564 KiB
55Elfogadva109ms1740 KiB
56Elfogadva26ms2104 KiB
57Elfogadva189ms8624 KiB
58Elfogadva101ms9912 KiB
59Időlimit túllépés1.103s32632 KiB
60Elfogadva239ms16812 KiB
61Időlimit túllépés1.077s16812 KiB
62Időlimit túllépés1.09s16816 KiB