MAGCARI

Spyware

Dec 26th, 2022
1,014
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int v[100010],dis[100010];
  4. vector<int > g[100010];
  5. vector<int > disNode[100010];
  6. queue<int> que;
  7. priority_queue<int > heap;
  8. int main(){
  9.     int n,m,st,mx=0;
  10.     scanf("%d %d %d",&n,&m,&st);
  11.     for(int i=1;i<=n;i++){
  12.         scanf("%d",&v[i]);
  13.         dis[i] = 1e9;
  14.     }
  15.     while(m--){
  16.         int u,v;
  17.         scanf("%d %d",&u,&v);
  18.         g[u].push_back(v);
  19.         g[v].push_back(u);
  20.     }
  21.     que.push(st);
  22.     dis[st] = 0;
  23.     while(!que.empty()){
  24.         int now = que.front();
  25.         que.pop();
  26.         mx = max(mx,dis[now]);
  27.         for(auto x:g[now]){
  28.             if(dis[x]>dis[now]+1){
  29.                 dis[x] = dis[now]+1;
  30.                 que.push(x);
  31.             }
  32.         }
  33.     }
  34.     long long ans = 0;
  35.     for(int i=1;i<=n;i++){
  36.         if(v[i] <= 0)       continue;
  37.         if(dis[i] == 1e9)   ans+=v[i];
  38.         else                disNode[dis[i]].push_back(v[i]);
  39.     }
  40.     for(int i=mx;i>0;i--){
  41.         for(auto x:disNode[i])
  42.             heap.push(x);
  43.         if(!heap.empty()){
  44.             ans+=heap.top();
  45.             heap.pop();
  46.         }
  47.     }
  48.     printf("%lld\n",ans);
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment