Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define fr first
- #define sc second
- #define pb push_back
- #define mp make_pair
- #define int long long
- signed main(){
- ios::sync_with_stdio(0);
- cin.tie(0);
- int n, r, m;
- cin >> n >> r >> m;
- vector<pair<int,int>>adj[n];
- vector<int>delta[n][n][n];
- int mat[n][n][n];
- for (int i = 0; i < n; i++){
- for (int j = 0; j < n; j++){
- for (int e = 0; e < n; e++){
- mat[i][j][e] = (int)1e18;
- delta[i][j][e] = {(int)1e18};
- }
- }
- }
- for (int i = 0; i < r; i++){
- int a,b, c;
- cin >> a >> b >> c;
- --a,--b;
- adj[a].pb(mp(b,c));
- adj[b].pb(mp(a,c));
- }
- vector<int>kuponi(m);
- for (int i = 0; i < m; i++)cin >> kuponi[i];
- sort(kuponi.rbegin(), kuponi.rend());
- int sum = 0;
- for (int i = 0; i < n; i++){
- for (auto j : adj[i]){
- mat[i][j.fr][1] = max(0LL, j.sc - kuponi[0]);
- mat[j.fr][i][1] = max(0LL, j.sc - kuponi[0]);
- delta[i][j.fr][1] = {j.sc};
- delta[j.fr][i][1] = {j.sc};
- }
- }
- for(int e1 = 0; e1 < n; e1++){
- for (int e2 = 0; e2 + e1 < n; e2++){
- for (int k = 0; k < n; k++){
- for (int a = 0; a < n; a++){
- for (int b = 0; b < n; b++){
- vector<int>nova = delta[a][k][e1];
- for (auto el : delta[k][b][e2])nova.pb(el);
- sort(nova.rbegin(),nova.rend());
- int tot = 0;
- for (int p = 0; p < (int)nova.size(); p++){
- if (p < m)tot += max(0LL, nova[p] - kuponi[p]);
- else tot += nova[p];
- }
- if (mat[a][b][e1 + e2] > tot){
- mat[a][b][e1+e2] = tot;
- delta[a][b][e1+e2] = nova;
- }
- }
- }
- }
- }
- }
- for (int i = 0; i < n; i++){
- for (int j = i + 1; j < n; j++){
- int best = (int)1e18;
- for (int p = 0; p < n; p++){
- best = min(best, mat[i][j][p]);
- }
- sum += best;
- }
- }
- cout<<sum;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement