144762025-01-11 14:19:18sarminRácsháló gráfcpp17Elfogadva 50/5025ms636 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {

    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, m, kk; cin >> n >> m >> kk;
    int all = n * m;
    vector<vector<int>> g(all, vector<int>(all, INT_MAX));
    for (int i = 0; i < all; i++) {
        for (int j = 0; j < all; j++) {
            if (i == j) g[i][j] = 0;
            int ab = abs(j - i);
            if ((ab == 1 && (int) i / m == (int) j / m) || ab == m) {
                g[i][j] = 1;
            }
        }
    }

    for (int k = 0; k < all; k++) {
        for (int i = 0; i < all; i++) {
            for (int j = 0; j < all; j++) {
                if (g[i][k] < INT_MAX && g[k][j] < INT_MAX && g[i][k] + g[k][j] < INT_MAX) {
                    g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
                }
            }
        }
    }

    for (int i = 0; i < kk; i++) {
        int x, y; cin >> x >> y;
        x--; y--;
        int mx = 0;
        for (int j = 0; j < all; j++) {
            for (int k = 0; k < all; k++) {
                g[j][k] = min(g[j][k], min(g[j][x] + 1 + g[y][k], g[j][y] + 1 + g[x][k]));
                mx = max(mx, g[j][k]);
            }
        }
        cout << mx << "\n";
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/025ms564 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms420 KiB
7Elfogadva2/23ms460 KiB
8Elfogadva2/24ms500 KiB
9Elfogadva2/23ms424 KiB
10Elfogadva2/22ms340 KiB
11Elfogadva2/24ms460 KiB
12Elfogadva2/217ms564 KiB
13Elfogadva3/312ms512 KiB
14Elfogadva3/33ms316 KiB
15Elfogadva3/312ms512 KiB
16Elfogadva3/33ms392 KiB
17Elfogadva3/38ms496 KiB
18Elfogadva3/33ms316 KiB
19Elfogadva3/31ms316 KiB
20Elfogadva3/32ms500 KiB
21Elfogadva3/34ms636 KiB
22Elfogadva3/324ms580 KiB