157202025-02-24 16:49:45TaxiradioÚtvonalakcpp17Wrong answer 0/1001.103s32052 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

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(e.top() != h && l[e.top()] >= vis[h]){
                    cs[ci]++;
                    if(!d[e.top()]){
                        c[e.top()] = ci;
                    }else{
                        g2[ci].push_back(e.top());
                        g2[e.top()].push_back(ci);
                    }
                    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;
}


int main() {
	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
1Accepted1ms316 KiB
2Wrong answer225ms15024 KiB
subtask20/15
3Wrong answer2ms316 KiB
4Wrong answer4ms748 KiB
5Accepted6ms1332 KiB
6Wrong answer14ms1764 KiB
7Wrong answer71ms7480 KiB
8Wrong answer155ms14868 KiB
subtask30/15
9Accepted4ms564 KiB
10Accepted8ms564 KiB
11Accepted48ms1588 KiB
12Accepted174ms2100 KiB
13Time limit exceeded1.1s9516 KiB
14Time limit exceeded1.1s18772 KiB
15Time limit exceeded1.087s31540 KiB
subtask40/15
16Wrong answer6ms568 KiB
17Wrong answer8ms1012 KiB
18Wrong answer18ms1844 KiB
19Wrong answer86ms7732 KiB
20Wrong answer177ms15056 KiB
subtask50/15
21Wrong answer1ms496 KiB
22Wrong answer1ms316 KiB
23Accepted3ms748 KiB
24Wrong answer2ms316 KiB
25Wrong answer2ms316 KiB
26Wrong answer2ms316 KiB
subtask60/40
27Accepted1ms316 KiB
28Wrong answer240ms13272 KiB
29Wrong answer2ms316 KiB
30Wrong answer4ms748 KiB
31Accepted6ms1332 KiB
32Wrong answer14ms1764 KiB
33Wrong answer71ms7480 KiB
34Wrong answer155ms14868 KiB
35Accepted4ms564 KiB
36Accepted8ms564 KiB
37Accepted48ms1588 KiB
38Accepted174ms2100 KiB
39Time limit exceeded1.1s9516 KiB
40Time limit exceeded1.1s18772 KiB
41Time limit exceeded1.087s31540 KiB
42Wrong answer6ms568 KiB
43Wrong answer8ms1012 KiB
44Wrong answer18ms1844 KiB
45Wrong answer86ms7732 KiB
46Wrong answer177ms15056 KiB
47Wrong answer1ms496 KiB
48Wrong answer1ms316 KiB
49Accepted3ms748 KiB
50Wrong answer2ms316 KiB
51Wrong answer2ms316 KiB
52Wrong answer2ms316 KiB
53Time limit exceeded1.103s29660 KiB
54Wrong answer6ms564 KiB
55Accepted114ms1680 KiB
56Wrong answer35ms2012 KiB
57Wrong answer326ms8500 KiB
58Wrong answer157ms9220 KiB
59Time limit exceeded1.09s32052 KiB
60Wrong answer379ms16560 KiB
61Time limit exceeded1.083s16304 KiB
62Time limit exceeded1.085s15888 KiB