mickypinata

IPST58: Restaurant

Nov 12th, 2021 (edited)
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> pii;
  5. typedef tuple<int, int, int> tiii;
  6.  
  7. const int N = 300 + 5;
  8.  
  9. int mat[N][N], dist[N], par[N], idx[N], deg[N];
  10.  
  11. int main(){
  12.  
  13.     int nVertex, cmd;
  14.     scanf("%d%d", &nVertex, &cmd);
  15.     for(int u = 1; u <= nVertex; ++u){
  16.         for(int v = 1; v <= nVertex; ++v){
  17.             scanf("%d", &mat[u][v]);
  18.         }
  19.         idx[u] = u;
  20.         dist[u] = 1e9;
  21.     }
  22.  
  23.     dist[1] = 0;
  24.     par[1] = 0;
  25.     for(int i = 0; i < nVertex; ++i){
  26.         int mn = 1e9;
  27.         int u = 0;
  28.         for(int j = 1; j <= nVertex - i; ++j){
  29.             if(dist[j] < mn){
  30.                 mn = dist[j];
  31.                 u = j;
  32.             }
  33.         }
  34.         if(par[u] != 0){
  35.             ++deg[idx[u]];
  36.             ++deg[par[u]];
  37.         }
  38.         for(int v = 1; v <= nVertex - i; ++v){
  39.             if(u == v){
  40.                 continue;
  41.             }
  42.             if(mat[idx[u]][idx[v]] < dist[v]){
  43.                 dist[v] = mat[idx[u]][idx[v]];
  44.                 par[v] = idx[u];
  45.             }
  46.         }
  47.         swap(idx[u], idx[nVertex - i]);
  48.         swap(dist[u], dist[nVertex - i]);
  49.         swap(par[u], par[nVertex - i]);
  50.     }
  51.  
  52.     for(int i = 1; i <= nVertex; ++i){
  53.         if(deg[i] >= 3){
  54.             cout << i << '\n';
  55.             if(cmd == 2){
  56.                 cout << deg[i];
  57.             }
  58.         }
  59.     }
  60.  
  61.     return 0;
  62. }
  63.  
Add Comment
Please, Sign In to add comment