156742025-02-21 17:39:24KateTaylorKaktuszgráfcpp17Accepted 50/508ms4492 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int n, m, ans = 0;
vector<vector<int>> edges;
vector<int> vis;

void solve(int node, int from, vector<int> par) {
	if (vis[node] == 2) return;
	par[node] = from;
	if (vis[node]) {
		int len = 1, curr = node;
		while (node != par[curr]) {
			len++;
			curr = par[curr];
		}
		ans = max(ans, len);
		return;
	}
	vis[node] = 1;
	for (int x : edges[node]) {
		if (x != from) solve(x, node, par);
	}
	vis[node] = 2;
	return;
}

int main() {
	cin >> n >> m;
	edges.resize(n);
	vis.assign(n, 0);
	while (m--) {
		int u, v;
		cin >> u >> v;
		edges[u - 1].push_back(v - 1);
		edges[v - 1].push_back(u - 1);
	}
	vector<int> temp(n, -1);
	for (int i = 0; i < n; i++) {
		if (!vis[i]) solve(i, i, temp);
	}
	cout << ans;
	return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted2/22ms564 KiB
4Accepted2/22ms564 KiB
5Accepted2/22ms508 KiB
6Accepted2/22ms436 KiB
7Accepted2/24ms2044 KiB
8Accepted2/22ms456 KiB
9Accepted2/22ms564 KiB
10Accepted2/22ms600 KiB
11Accepted2/22ms564 KiB
12Accepted2/22ms564 KiB
13Accepted2/23ms812 KiB
14Accepted2/22ms564 KiB
15Accepted2/22ms564 KiB
16Accepted2/22ms500 KiB
17Accepted2/22ms316 KiB
18Accepted2/22ms564 KiB
19Accepted3/32ms564 KiB
20Accepted3/37ms3308 KiB
21Accepted3/38ms4404 KiB
22Accepted3/38ms4492 KiB
23Accepted3/38ms4460 KiB
24Accepted3/38ms4296 KiB