Beingamanforever

Floyd Warshal 2, Candidates in no Shortest Path

Feb 7th, 2025
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. // #include <atcoder/all>
  3. using namespace std;
  4. #define int long long
  5. #define all(x) (x).begin(), (x).end()
  6. typedef vector<int> vi;
  7. typedef vector<vi> vvi;
  8. typedef vector<pair<int, int>> vpi;
  9. typedef pair<int, int> pi;
  10. #define f first
  11. #define s second
  12. #define pb push_back
  13. #define endl "\n"
  14. #define yes cout << "YES" << endl
  15. #define no cout << "NO" << endl
  16. int dx[] = {-1, 0, 1, 0};
  17. int dy[] = {0, 1, 0, -1};
  18. const int mod1 = 1e9 + 7, mod2 = 998244353, INF = 2e18, N = 2e5 + 5, L = 19;
  19. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
  20. // -----------------------------------------------------------------------------
  21. struct edge
  22. {
  23.     int u, v, wt;
  24. };
  25. void solve()
  26. {
  27.     int n, m;
  28.     cin >> n >> m;
  29.     vvi dist(n + 1, vi(n + 1, INF));
  30.     vector<edge> edges;
  31.     for (int i = 1; i <= n; i++)
  32.     {
  33.         dist[i][i] = 0;
  34.     }
  35.     for (int i = 0; i < m; i++)
  36.     {
  37.         int u, v, w;
  38.         cin >> u >> v >> w;
  39.         dist[u][v] = w;
  40.         dist[v][u] = w;
  41.         edges.pb({u, v, w});
  42.     }
  43.     for (int k = 1; k <= n; k++)
  44.     {
  45.         for (int i = 1; i <= n; i++)
  46.         {
  47.             for (int j = 1; j <= n; j++)
  48.             {
  49.                 if (dist[i][k] < INF && dist[k][j] < INF)
  50.                 {
  51.                     dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     int cnt = 0;
  57.     for (auto [u, v, wt] : edges)
  58.     {
  59.         bool flag = false;
  60.         for (int i = 1; i <= n; i++)
  61.         {
  62.             for (int j = 1; j <= n; j++)
  63.             {
  64.                 int length = (dist[i][u] + wt + dist[v][j]);
  65.                 if (dist[i][j] == length)
  66.                 {
  67.                     flag = true;
  68.                     break;
  69.                 }
  70.             }
  71.             if (flag)
  72.             {
  73.                 break;
  74.             }
  75.         }
  76.         if (!flag)
  77.         {
  78.             cnt++;
  79.         }
  80.     }
  81.     cout << (cnt) << endl;
  82.     return;
  83. }
  84.  
  85. signed main()
  86. {
  87.     // __START__;
  88.     ios_base::sync_with_stdio(false);
  89.     cin.tie(NULL);
  90.     cout.tie(NULL);
  91.     int t = 1;
  92.     // cin >> t;
  93.     while (t--)
  94.     {
  95.         solve();
  96.     }
  97.     // __END__;
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment