Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- const int M = 1e9+7;
- const int N = 1e7+5;
- vector<vector<int>> adjMat;
- int n, m, q;
- int memo[105][105][105];
- int floyd(int i,int j,int k){
- if(k==0) return adjMat[i][j];
- if(memo[i][j][k]!=INT_MIN) return memo[i][j][k];
- int maxi1 = INT_MIN;
- int maxi2 = INT_MIN;
- maxi1 = max(maxi1,floyd(i,j,k-1));
- maxi2 = max({maxi2,floyd(i,k,k-1),floyd(k,j,k-1)});
- return memo[i][j][k]=min(maxi1,maxi2);
- }
- int32_t main() {
- int tt = 1;
- while((cin >> n >> m >> q) && (n!=0 && m!=0 && q!=0)){
- adjMat.assign(n+1, vector<int>(n+1, INT_MAX));
- for (int i = 0; i < 105; ++i)
- {
- for (int j = 0; j < 105; ++j)
- {
- for (int k = 0; k < 105; ++k)
- {
- memo[i][j][k] = INT_MIN;
- }
- }
- }
- for(int i=0;i<m;++i) {
- int u, v, w;
- cin >> u >> v >> w;
- adjMat[u][v] = w;
- adjMat[v][u] = w;
- }
- for(int i=1;i<=n;++i) {
- for(int j=1;j<=n;++j) {
- if(i == j) adjMat[i][j] = 0;
- // cout << adjMat[i][j] << " ";
- }
- // cout << endl;
- }
- vector<vector<int>> ans(n+1,vector<int>(n+1));
- for(int i=1;i<=n;++i) {
- for (int j = 1; j <= n; ++j)
- {
- if(i==j) continue;
- int dist = floyd(i,j,n);
- ans[i][j] = dist;
- }
- }
- if(tt!=1)cout << "\n";
- cout << "Case " << "#" << (tt++) << "\n";
- while(q--){
- int l ,r;
- cin >> l >> r;
- if(ans[l][r]==INT_MAX) cout << "no path\n";
- else cout << ans[l][r] << "\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment