133892025-01-07 18:38:58RicsiRácsháló gráfcpp17Elfogadva 50/5019ms600 KiB
#include <iostream>
#include <vector>
using namespace std;

bool g[201][201];
int dis[201][201];

int main() {
	int n, m, k; cin >> n >> m >> k;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (i != 1) g[(i - 1) * m + j][(i - 2) * m + j] = true;
			if (i != n) g[(i - 1) * m + j][i * m + j] = true;
			if (j != 1)g[(i - 1) * m + j][(i - 1) * m + j - 1] = true;
			if(j!=m)g[(i - 1) * m + j][(i - 1) * m + j + 1] = true;
		}
	}
	for (int i = 1; i <= n*m; i++) {
		for (int j = 1; j <= n * m; j++) {
			if (g[i][j])dis[i][j] = 1;
			else dis[i][j] = 100000;
			if (i == j)dis[i][j] = 0;
		}
	}
	for (int x = 1; x <= n * m; x++) {
		for (int i = 1; i <= n * m; i++) {
			for (int j = 1; j <= n * m; j++) {
				dis[i][j] = min(dis[i][j], dis[i][x] + dis[x][j]);
			}
		}
	}
	while (k--) {
		int u, v; cin >> u >> v;
		for (int i = 1; i <= n * m; i++) {
			for (int j = 1; j <= n * m; j++) {
				dis[i][j] = min(dis[i][j], min(dis[i][u] + dis[v][j] + 1, dis[i][v] + dis[u][j] + 1));
				dis[j][i] = min(dis[i][j], min(dis[i][u] + dis[v][j] + 1, dis[i][v] + dis[u][j] + 1));
			}
		}
		int maxe = 0;
		for (int i = 1; i <= n * m; i++) {
			for (int j = 1; j <= n * m; j++) {
				if (i != j)maxe = max(maxe, dis[i][j]);
			}
		}
		cout << maxe << '\n';
	}
}

RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/019ms564 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/23ms316 KiB
8Elfogadva2/23ms316 KiB
9Elfogadva2/23ms500 KiB
10Elfogadva2/21ms316 KiB
11Elfogadva2/23ms388 KiB
12Elfogadva2/214ms600 KiB
13Elfogadva3/39ms552 KiB
14Elfogadva3/33ms316 KiB
15Elfogadva3/39ms576 KiB
16Elfogadva3/33ms508 KiB
17Elfogadva3/38ms540 KiB
18Elfogadva3/33ms316 KiB
19Elfogadva3/31ms444 KiB
20Elfogadva3/31ms316 KiB
21Elfogadva3/33ms508 KiB
22Elfogadva3/319ms592 KiB