#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = 4500;
vector<int> G[maxn];
int num[maxn];
int vis[maxn];
int ans;
int N, M;
void dfs(int v, int t) {
num[v] = t;
vis[v] = 1;
for(int i = 0; i < G[v].size(); ++i) {
if(!vis[G[v][i]]) {//还可以扩展
dfs(G[v][i], t+1);
} else { //找到环了
if(ans < num[v] - num[G[v][i]] + 1) {
ans = num[v] - num[G[v][i]] + 1;
}
}
}
}
int main() {
//freopen("data.in", "r", stdin);
int T;
scanf("%d", &T);
while(T--) {
memset(vis, 0, sizeof(vis));
memset(num, 0, sizeof(num));
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; ++i)
G[i].clear();
for(int i = 0; i < M; i++) {
int a, b;
scanf("%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
ans = 0;
for(int i = 1; i <= N; ++i) {
if(!vis[i]) {
dfs(i, 1);
}
}
if(ans > 2)
printf("%d\n", ans);
else
printf("0\n");
}
return 0;
}
POJ 3895 Cycles of Lanes(DFS)
猜你喜欢
转载自blog.csdn.net/ccshijtgc/article/details/80799391
今日推荐
周排行