fork(1) download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int w[101][101];
  6. vector< int > p;
  7.  
  8. int main(){
  9.  
  10. int n, k;
  11.  
  12. scanf( "%d%d", &n, &k );
  13.  
  14. for( int i= 0, x; i< k; ++i ){
  15. scanf( "%d", &x );
  16. p.push_back(x);
  17. }
  18.  
  19. for( int i= 1; i<= n; ++i )
  20. for( int j= 1; j<= n; ++j )
  21. scanf( "%d", &w[i][j] );
  22.  
  23. for( int k= 1; k<= n; ++k )
  24. for( int i= 1; i<= n; ++i )
  25. for( int j= 1; j<= n; ++j )
  26. w[i][j]= min( w[i][j], w[i][k]+w[k][j] );
  27.  
  28. int mini_cost= 0;
  29.  
  30. for( int i= 1; i<= n; ++i ){
  31.  
  32. int min= 1<<30;
  33. //int in;
  34.  
  35. for( int j= 0; j< p.size(); ++j ){
  36.  
  37. if( p[j]== i ){
  38. min= 0;
  39. //in= i;
  40. break;
  41. }
  42.  
  43. if( min > w[i][p[j]] ){
  44. min= w[i][p[j]];
  45. //in= p[j];
  46. }
  47. }
  48.  
  49. //cout << i << " " << in << " " << min << endl;
  50.  
  51. mini_cost+= min;
  52. }
  53.  
  54. cout << mini_cost << endl;
  55.  
  56. return 0;
  57.  
  58. }
  59.  
Success #stdin #stdout 0s 3316KB
stdin
4 2
1 4
0 2 4 3
2 0 5 2
4 5 0 1
3 2 1 0
stdout
3