Waliul

Untitled

Apr 6th, 2021 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define inf 522133279
  5. #define inf_m 31
  6. #define mx 85
  7. #define mx_d 12
  8. int mat[mx][mx], fest[mx][mx];
  9.  
  10. void floyd(int n)
  11. {
  12.     for(int k = 1; k <= n; k++)
  13.         for(int i = 1; i <= n; i++)
  14.             for(int j = 1; j <= n; j++)
  15.                 if(mat[i][j] + fest[i][j] > mat[i][k] + mat[k][j] + max(fest[i][k], fest[k][j]))
  16.                 {
  17.                     mat[i][j] = mat[i][k] + mat[k][j];
  18.                     fest[i][j] = max(fest[i][k], fest[k][j]);
  19.                 }
  20.  
  21. }
  22.  
  23. int main()
  24. {
  25.     int i, j, t, kase(0), n, u, v, total, k, m, q, c;
  26.     while(scanf("%d %d %d", &n, &m, &q) && n+m+q)
  27.     {
  28.         if(kase)
  29.             puts("");
  30.         memset(mat, inf_m, sizeof(mat));
  31.         memset(fest, inf_m, sizeof(fest));
  32.         for(i = 1; i <= n; i++)
  33.             scanf("%d", &fest[i][i]), mat[i][i] = 0;
  34.         while(m--)
  35.         {
  36.             scanf("%d %d %d", &u, &v, &c);
  37.             mat[u][v] = mat[v][u] = c;
  38.             fest[u][v] = fest[v][u] = max(fest[u][u], fest[v][v]);
  39.         }
  40.         floyd(n);
  41.         floyd(n);
  42.         printf("Case #%d\n", ++kase);
  43.         while(q--)
  44.         {
  45.             scanf("%d %d", &u, &v);
  46.             mat[u][v] + fest[u][v] >= inf ? puts("-1") : printf("%d\n", mat[u][v] + fest[u][v]);
  47.         }
  48.     }
  49.     return 0;
  50. }
Add Comment
Please, Sign In to add comment