133502025-01-07 16:52:38GervidRácsháló gráfcpp17Wrong answer 27/5068ms512 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 });
			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]);
			token++;
		}
		cout << maxl << '\n';
	}
}
SubtaskSumTestVerdictTimeMemory
base27/50
1Accepted0/01ms500 KiB
2Accepted0/068ms316 KiB
3Wrong answer0/21ms316 KiB
4Accepted2/21ms316 KiB
5Wrong answer0/21ms316 KiB
6Wrong answer0/22ms316 KiB
7Wrong answer0/24ms428 KiB
8Accepted2/24ms512 KiB
9Wrong answer0/24ms316 KiB
10Wrong answer0/22ms352 KiB
11Accepted2/24ms508 KiB
12Wrong answer0/212ms316 KiB
13Accepted3/330ms428 KiB
14Accepted3/34ms500 KiB
15Accepted3/332ms432 KiB
16Accepted3/34ms428 KiB
17Wrong answer0/327ms316 KiB
18Accepted3/310ms428 KiB
19Wrong answer0/31ms368 KiB
20Wrong answer0/32ms316 KiB
21Accepted3/312ms316 KiB
22Accepted3/368ms316 KiB