main.cc 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <vector>
  4. #include <queue>
  5. using std::vector; using std::queue;
  6. const int N = 100000;
  7. const int M = 200000;
  8. struct node {
  9. int x;
  10. int y;
  11. node(int x, int y) : x(x), y(y) {}
  12. };
  13. vector<node> g[N + 1];
  14. int dis[N + 1];
  15. int main() {
  16. int n, m;
  17. scanf("%d %d", &n, &m);
  18. for (int i = 0, p, q, c; i < m; i++) {
  19. scanf("%d %d %d", &p, &q, &c);
  20. if (p == q) continue;
  21. g[p].push_back(node(q, c));
  22. g[q].push_back(node(p, c));
  23. }
  24. memset(dis, -1, sizeof(dis));
  25. queue<int> q;
  26. q.push(n);
  27. dis[n] = 0;
  28. int d = 0, size = q.size();
  29. while (size != 0) {
  30. int cur = q.front();
  31. q.pop();
  32. if (cur == 1) break;
  33. size--;
  34. for (node i : g[cur]) {
  35. if (dis[i.x] == -1) {
  36. dis[i.x] = d + 1;
  37. q.push(i.x);
  38. }
  39. }
  40. if (size == 0) {
  41. size = q.size();
  42. d++;
  43. }
  44. }
  45. printf("%d\n", d);
  46. q = queue<int>();
  47. q.push(1);
  48. while (!q.empty()) {
  49. int cur = q.front();
  50. q.pop();
  51. if (cur == n) break;
  52. }
  53. return 0;
  54. }