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;
- const int INF = LLONG_MAX;
- int n, m;
- vector<vector<int>> adj;
- int memo[105][105][105];
- int floyd(int i, int j, int k) {
- if(k == 0) return adj[i][j];
- if(memo[i][j][k] != LLONG_MIN) return memo[i][j][k];
- int a = floyd(i, k, k-1);
- int b = floyd(k, j, k-1);
- int via = (a >= INF || b >= INF) ? INF : (long long)a + (long long)b;
- int res = min(floyd(i, j, k-1), via);
- // int res = min(floyd(i, j, k-1), floyd(i, k, k-1) + floyd(k, j, k-1));
- return memo[i][j][k] = res;
- }
- int32_t main() {
- cout << fixed << setprecision(3);
- int tt = 1;
- int a, b;
- while((cin >> a >> b) && (a != 0 && b != 0)) {
- map<int,int> mp;
- vector<pair<int, int>> edges;
- if(mp.find(a)==mp.end()) mp[a] = mp.size()+1;
- if(mp.find(b)==mp.end()) mp[b] = mp.size()+1;
- edges.push_back({mp[a], mp[b]});
- int u, v;
- while((cin >> u >> v) && (u != 0 && v != 0)) {
- if(mp.find(u)==mp.end()) mp[u] = mp.size()+1;
- if(mp.find(v)==mp.end()) mp[v] = mp.size()+1;
- edges.push_back({mp[u], mp[v]});
- }
- n = mp.size();
- m = edges.size();
- // cin >> n >> m;
- adj.assign(n+1, vector<int>(n+1, INF));
- for (auto [u,v] : edges)
- {
- // int u, v;
- // cin >> u >> v;
- adj[u][v] = 1;
- }
- 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] = LLONG_MIN;
- }
- }
- }
- for (int i = 1; i <= n; ++i)
- {
- for (int j = 1; j <= n; ++j)
- {
- if(i == j) adj[i][j] = 0;
- // else if(adj[i][j] == 0) adj[i][j] = INF;
- }
- }
- for (int i = 1; i <= n; ++i)
- {
- for (int j = 1; j <= n; ++j)
- {
- floyd(i, j, n);
- }
- }
- int sum = 0, cnt = 0;
- for(int i=1;i<=n;++i) {
- for(int j=1;j<=n;++j) {
- if(memo[i][j][n]!= INF && i != j){
- sum+=(memo[i][j][n]);
- cnt++;
- }
- // cout << memo[i][j][n] << " ";
- }
- // cout << endl;
- }
- if(tt != 1) cout << endl;
- cout << "Case " << tt++
- << ": average length between pages = "
- <<((double)sum / cnt) << " clicks";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment