133562025-01-07 16:59:40GervidRácsháló gráfcpp17Accepted 50/5067ms508 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <array>

using namespace std;

int main()
{
	iostream::sync_with_stdio(0);
	cin.tie(0);

	int n, m, k, i;
	cin >> n >> m >> k;

	vector<vector<int>> g(n*m);
	for (i = 0; i < n*m; i++)
	{
		if (i / m == (i - 1) / m && i > 0) g[i].push_back(i - 1);
		if (i / m == (i + 1) / m) g[i].push_back(i + 1);
		if (i - m >= 0) g[i].push_back(i - m);
		if (i + m < n*m) g[i].push_back(i + m);
	}

	vector<int> state(n * m, 0);
	int token = 1;

	while (k--)
	{
		int node1, node2;
		cin >> node1 >> node2;
		g[--node1].push_back(--node2);
		g[node2].push_back(node1);

		int maxl = 0;
		for (i = 0; i < n*m; i++)
		{
			queue<array<int, 2>> q;
			q.push({ i, 0 });
			state[i] = ++token;
			while (true)
			{
				for (int neighbour : g[q.front()[0]])
				{
					if (state[neighbour] != token)
					{
						state[neighbour] = token;
						q.push({ neighbour, q.front()[1] + 1 });
					}
				}
				if (q.size() == 1) break;
				q.pop();
			}
			maxl = max(maxl, q.front()[1]);
		}
		cout << maxl << '\n';
	}
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms508 KiB
2Accepted0/065ms432 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms348 KiB
6Accepted2/21ms316 KiB
7Accepted2/24ms316 KiB
8Accepted2/24ms316 KiB
9Accepted2/23ms316 KiB
10Accepted2/22ms328 KiB
11Accepted2/24ms328 KiB
12Accepted2/210ms432 KiB
13Accepted3/329ms432 KiB
14Accepted3/34ms316 KiB
15Accepted3/330ms428 KiB
16Accepted3/34ms508 KiB
17Accepted3/327ms316 KiB
18Accepted3/39ms428 KiB
19Accepted3/31ms316 KiB
20Accepted3/31ms316 KiB
21Accepted3/312ms428 KiB
22Accepted3/367ms428 KiB