157202025-02-24 16:49:45TaxiradioÚtvonalakcpp17Hibás válasz 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";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Hibás válasz225ms15024 KiB
subtask20/15
3Hibás válasz2ms316 KiB
4Hibás válasz4ms748 KiB
5Elfogadva6ms1332 KiB
6Hibás válasz14ms1764 KiB
7Hibás válasz71ms7480 KiB
8Hibás válasz155ms14868 KiB
subtask30/15
9Elfogadva4ms564 KiB
10Elfogadva8ms564 KiB
11Elfogadva48ms1588 KiB
12Elfogadva174ms2100 KiB
13Időlimit túllépés1.1s9516 KiB
14Időlimit túllépés1.1s18772 KiB
15Időlimit túllépés1.087s31540 KiB
subtask40/15
16Hibás válasz6ms568 KiB
17Hibás válasz8ms1012 KiB
18Hibás válasz18ms1844 KiB
19Hibás válasz86ms7732 KiB
20Hibás válasz177ms15056 KiB
subtask50/15
21Hibás válasz1ms496 KiB
22Hibás válasz1ms316 KiB
23Elfogadva3ms748 KiB
24Hibás válasz2ms316 KiB
25Hibás válasz2ms316 KiB
26Hibás válasz2ms316 KiB
subtask60/40
27Elfogadva1ms316 KiB
28Hibás válasz240ms13272 KiB
29Hibás válasz2ms316 KiB
30Hibás válasz4ms748 KiB
31Elfogadva6ms1332 KiB
32Hibás válasz14ms1764 KiB
33Hibás válasz71ms7480 KiB
34Hibás válasz155ms14868 KiB
35Elfogadva4ms564 KiB
36Elfogadva8ms564 KiB
37Elfogadva48ms1588 KiB
38Elfogadva174ms2100 KiB
39Időlimit túllépés1.1s9516 KiB
40Időlimit túllépés1.1s18772 KiB
41Időlimit túllépés1.087s31540 KiB
42Hibás válasz6ms568 KiB
43Hibás válasz8ms1012 KiB
44Hibás válasz18ms1844 KiB
45Hibás válasz86ms7732 KiB
46Hibás válasz177ms15056 KiB
47Hibás válasz1ms496 KiB
48Hibás válasz1ms316 KiB
49Elfogadva3ms748 KiB
50Hibás válasz2ms316 KiB
51Hibás válasz2ms316 KiB
52Hibás válasz2ms316 KiB
53Időlimit túllépés1.103s29660 KiB
54Hibás válasz6ms564 KiB
55Elfogadva114ms1680 KiB
56Hibás válasz35ms2012 KiB
57Hibás válasz326ms8500 KiB
58Hibás válasz157ms9220 KiB
59Időlimit túllépés1.09s32052 KiB
60Hibás válasz379ms16560 KiB
61Időlimit túllépés1.083s16304 KiB
62Időlimit túllépés1.085s15888 KiB