TawratNibir

Untitled

Jan 30th, 2026
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5. const int M = 1e9+7;
  6. const int N = 1e7+5;
  7. const int INF = LLONG_MAX;
  8. int n, m;
  9. vector<vector<int>> adj;
  10. int memo[105][105][105];
  11. int floyd(int i, int j, int k) {
  12.     if(k == 0) return adj[i][j];
  13.     if(memo[i][j][k] != LLONG_MIN) return memo[i][j][k];
  14.     __int128 a = floyd(i, k, k-1);
  15.     __int128 b = floyd(k, j, k-1);
  16.     int via = (a >= INF || b >= INF) ? INF : a + b;
  17.     int res = min(floyd(i, j, k-1), via);
  18.  
  19.     // int res = min(floyd(i, j, k-1), floyd(i, k, k-1) + floyd(k, j, k-1));
  20.     return memo[i][j][k] = res;
  21. }
  22. int32_t main() {
  23.     cout << fixed << setprecision(3);
  24.     int tt = 1;
  25.     int a, b;
  26.     while((cin >> a >> b) && (a != 0 && b != 0)) {
  27.         vector<pair<int, int>> edges;
  28.         edges.push_back({a, b});
  29.     int u, v;
  30.     int maxi = max(a, b);
  31.     while((cin >> u >> v) && (u != 0 && v != 0)) {
  32.         edges.push_back({u, v});
  33.         maxi = max({u,v,maxi});
  34.     }
  35.     n = maxi;
  36.     m = edges.size();
  37.     // cin >> n >> m;
  38.     adj.assign(n+1, vector<int>(n+1, INF));
  39.     for (auto [u,v] : edges)
  40.     {
  41.         // int u, v;
  42.         // cin >> u >> v;
  43.         adj[u][v] = 1;
  44.     }
  45.     for (int i = 1; i < 105; ++i)
  46.     {
  47.         for (int j = 1; j < 105; ++j)
  48.         {
  49.             for(int k=1;k<105;++k) {
  50.                 memo[i][j][k] = LLONG_MIN;
  51.             }        
  52.         }
  53.     }
  54.     for (int i = 1; i <= n; ++i)
  55.     {
  56.         for (int j = 1; j <= n; ++j)
  57.         {
  58.             if(i == j) adj[i][j] = 0;
  59.             // else if(adj[i][j] == 0) adj[i][j] = INF;
  60.         }
  61.     }
  62.     for (int i = 1; i <= n; ++i)
  63.     {
  64.         for (int j = 1; j <= n; ++j)
  65.         {
  66.             floyd(i, j, n);
  67.         }
  68.     }
  69.     int sum = 0, cnt = 0;
  70.     for(int i=1;i<=n;++i) {
  71.         for(int j=1;j<=n;++j) {
  72.             if(memo[i][j][n]!= INF && i != j){
  73.                 sum+=(memo[i][j][n]);
  74.                 cnt++;
  75.             }
  76.             // cout << memo[i][j][n] << " ";
  77.         }
  78.         // cout << endl;
  79.     }
  80.     if(tt != 1) cout << endl;
  81.     cout << "Case " << tt++
  82.     << ": average length between pages = "
  83.     <<((double)sum / cnt) << " clicks";
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment