fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF 1000000000
  5. #define MAX 2505
  6. vector<int> adj[MAX];
  7. int n, m, answer = INF;
  8.  
  9. void dfs(int u, int parent, vector<int>& dist, vector<bool>& visited) {
  10. visited[u] = true;
  11. for (int v : adj[u]) {
  12. if (!visited[v]) {
  13. dist[v] = dist[u] + 1;
  14. dfs(v, u, dist, visited);
  15. }
  16. else if (v != parent) {
  17. // Chu trình được tìm thấy: tính độ dài chu trình
  18. answer = min(answer, dist[u] - dist[v] + 1);
  19. }
  20. }
  21. }
  22.  
  23. void solve() {
  24. scanf("%d %d", &n, &m);
  25. for (int i = 0; i < m; i++) {
  26. int u, v; scanf("%d %d", &u, &v);
  27. adj[u].push_back(v);
  28. adj[v].push_back(u);
  29. }
  30.  
  31. for (int i = 1; i <= n; i++) {
  32. vector<bool> visited(n + 1, false);
  33. vector<int> dist(n + 1, 0);
  34. dfs(i, -1, dist, visited);
  35. }
  36.  
  37. if (answer == INF) printf("-1\n");
  38. else printf("%d\n", answer);
  39. }
  40.  
  41. int main() {
  42. solve();
  43. }
  44.  
Success #stdin #stdout 0s 5308KB
stdin
5 6
1 2
1 3
2 4
2 5
3 4
4 5
stdout
-3