DuongNhi99

KPATH

Dec 9th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. template<typename A, typename B> A power(A a, B b) {if (b == 1) return a; A t = power(a, b / 2); return (b & 1 ? t * t * a : t * t);}
  5.  
  6. const int N = 1e2 + 5;
  7.  
  8. typedef vector<int64_t> v64;
  9.  
  10. int64_t n, m, k;
  11. vector<v64> adj;
  12. int64_t ans = 0;
  13. vector<v64> multi;
  14.  
  15. vector<v64> operator *(vector<v64> a, vector<v64> b) {
  16.     int n = a.size();
  17.     int p = a[0].size();
  18.     int m = b[0].size();
  19.  
  20.     vector<v64> d(n + 5, v64 (m + 5, -1));
  21.  
  22.     for(int i = 0; i < n; ++i)
  23.         for(int j = 0; j < m; ++j)
  24.             for(int t = 0; t < p; ++t)
  25.                 if (a[i][t] != -1 && b[t][j] != -1) {
  26.                     d[i][j] = max(d[i][j], a[i][t] + b[t][j]);
  27.                 }
  28.  
  29.     return d;
  30. }
  31.  
  32.  
  33. int main() {
  34.     freopen("in.txt", "r", stdin);
  35.     //freopen("KPATH.inp", "r", stdin);
  36.     //freopen("KPATH.out", "w", stdout);
  37.     ios_base::sync_with_stdio(false);
  38.     cin.tie(NULL); cout.tie(NULL);
  39.  
  40.     cin >> n >> m >> k;
  41.  
  42.     adj.resize(n + 1, v64(n + 1, -1));
  43.  
  44.     for(int i = 0; i < m; ++i) {
  45.         int u, v, c; cin >> u >> v >> c;
  46.         adj[u][v] = c;
  47.     }
  48.  
  49.     multi = power(adj, k);
  50.  
  51.     int64_t ans = -1;
  52.     for(int i = 0; i <= n; ++i)
  53.         for(int j = 0; j <= n; ++j)
  54.             ans = max(ans, multi[i][j]);
  55.  
  56.     cout << ans << '\n';
  57.  
  58.     return 0;
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment