Advertisement
Josif_tepe

Untitled

Mar 12th, 2022
1,422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. using namespace std;
  7. int n, m, k, S;
  8. vector<int> graph[100005];
  9. int type[100005];
  10. int dist[100001][101];
  11. int main() {
  12.     ios_base::sync_with_stdio(false);
  13.     cin >> n >> m >> k >> S;
  14.     for(int i = 0; i < n; i++) {
  15.         cin >> type[i];
  16.         type[i]--;
  17.     }
  18.     for(int i = 0; i < m; i++) {
  19.         int a, b;
  20.         cin >> a >> b;
  21.         a--; b--;
  22.         graph[a].push_back(b);
  23.         graph[b].push_back(a);
  24.     }
  25.     for(int i = 0; i < k; i++) {
  26.         queue<int> Q;
  27.         vector<bool> visited(n, false);
  28.         for(int j = 0; j < n; j++) {
  29.             if(type[j] == i) {
  30.                 Q.push(j);
  31.                 Q.push(0);
  32.                 dist[j][i] = 0;
  33.                 visited[j] = true;
  34.             }
  35.         }
  36.        
  37.         while(!Q.empty()) {
  38.             int node = Q.front();
  39.             Q.pop();
  40.             int cekor = Q.front();
  41.             Q.pop();
  42.             dist[node][i] = cekor;
  43.             for(int x = 0; x < graph[node].size(); x++) {
  44.                 int sosed = graph[node][x];
  45.                 if(!visited[sosed]) {
  46.                     visited[sosed] = true;
  47.                     Q.push(sosed);
  48.                     Q.push(cekor + 1);
  49.                 }
  50.             }
  51.         }
  52.     }
  53.     for(int i = 0; i < n; i++) {
  54.         vector<int> tmp;
  55.         for(int j = 0; j < k; j++) {
  56.             tmp.push_back(dist[i][j]);
  57.         }
  58.         sort(tmp.begin(), tmp.end());
  59.         int sum = 0;
  60.         for(int j = 0; j < S; j++) {
  61.             sum += tmp[j];
  62.         }
  63.         cout << sum << " ";
  64.     }
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement