MAGCARI

Spyware

Dec 30th, 2022
1,623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. /*
  2.     Task    :
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 31 December 2022 [08:56]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. int val[100010],dis[100010];
  10. vector<int > g[100010],disNode[100010];
  11. void bfs(int n,int k){
  12.     memset(dis,-1,sizeof dis);
  13.     queue<int > que;
  14.     que.push(k);
  15.     dis[k] = 0;
  16.     while(!que.empty()){
  17.         int now = que.front();
  18.         que.pop();
  19.         for(auto x:g[now]){
  20.             if(dis[x]==-1){
  21.                 dis[x] = dis[now]+1;
  22.                 que.push(x);
  23.             }
  24.         }
  25.     }
  26. }
  27. int main(){
  28.     cin.tie(0)->sync_with_stdio(0);
  29.     cin.exceptions(cin.failbit);
  30.     int n,m,k;
  31.     cin >> n >> m >> k;
  32.     for(int i=1;i<=n;i++)
  33.         cin >> val[i];
  34.     for(int i=1;i<=m;i++){
  35.         int u,v;
  36.         cin >> u >> v;
  37.         g[u].push_back(v);
  38.         g[v].push_back(u);
  39.     }
  40.     bfs(n,k);
  41.     int mx = 0;
  42.     long long ans = 0;
  43.     for(int i=1;i<=n;i++){
  44.         if(val[i] <= 0) continue;
  45.         if(dis[i] == -1){
  46.             ans+=val[i];
  47.             continue;
  48.         }
  49.         disNode[dis[i]].push_back(i);
  50.         mx = max(mx,dis[i]);
  51.     }
  52.     priority_queue<int > heap;
  53.     for(int i=mx;i>=1;i--){
  54.         for(auto x:disNode[i])
  55.             heap.push(val[x]);
  56.         if(!heap.empty()){
  57.             ans+=heap.top();
  58.             heap.pop();
  59.         }
  60.     }
  61.     cout << ans << '\n';
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment