Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<vector>
- #include<fstream>
- #include<algorithm>
- #define long long long
- #define nln '\n'
- const long N = 110;
- using namespace std;
- // Global variables: f1, n, m, a, b
- fstream f1;
- vector<long> b;
- vector<vector<long>> a(N), tra(N);
- long n, m;
- void data()
- {
- f1.open("vdanger.inp", ios:: in);
- cin >> n >> m;
- b.resize(m+1, 0);
- for (long i = 1; i <= m; ++i)
- cin >> b[i];
- for (long i = 1; i <= n; ++i)
- {
- a[i].resize(n+1, 0);
- tra[i].resize(n+1, 0);
- for (long j = 1; j <= n; ++j)
- cin >> a[i][j];
- }
- f1.close();
- }
- void floyandwarshall()
- {
- for (long i = 1; i <= n; ++i)
- for (long j = 1; j <= n; ++j)
- tra[i][j] = i;
- for (long k = 1; k <= n; ++k)
- for (long i = 1; i <= n; ++i)
- for (long j = 1; j <= n; ++j)
- if (a[i][k] + a[k][j] < a[i][j])
- {
- a[i][j] = a[i][k] + a[k][j];
- tra[i][j] = tra[k][j];
- }
- }
- void find()
- {
- long res = 0;
- for (long i = 1; i <= m-1; ++i)
- res += a[b[i]][b[i+1]];
- cout << res << nln;
- long sta = 1, fin = 3;
- vector<long> pat;
- while (fin != sta)
- {
- pat.push_back(fin);
- fin = tra[sta][fin];
- }
- pat.push_back(fin);
- reverse(pat.begin(), pat.end());
- /*for (const auto &i : pat)
- cout << i << ' ';
- cout << nln;*/
- }
- void process()
- {
- floyandwarshall();
- find();
- }
- int main()
- {
- data();
- process();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment