Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task :
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 31 December 2022 [08:56]
- */
- #include<bits/stdc++.h>
- using namespace std;
- int val[100010],dis[100010];
- vector<int > g[100010],disNode[100010];
- void bfs(int n,int k){
- memset(dis,-1,sizeof dis);
- queue<int > que;
- que.push(k);
- dis[k] = 0;
- while(!que.empty()){
- int now = que.front();
- que.pop();
- for(auto x:g[now]){
- if(dis[x]==-1){
- dis[x] = dis[now]+1;
- que.push(x);
- }
- }
- }
- }
- int main(){
- cin.tie(0)->sync_with_stdio(0);
- cin.exceptions(cin.failbit);
- int n,m,k;
- cin >> n >> m >> k;
- for(int i=1;i<=n;i++)
- cin >> val[i];
- for(int i=1;i<=m;i++){
- int u,v;
- cin >> u >> v;
- g[u].push_back(v);
- g[v].push_back(u);
- }
- bfs(n,k);
- int mx = 0;
- long long ans = 0;
- for(int i=1;i<=n;i++){
- if(val[i] <= 0) continue;
- if(dis[i] == -1){
- ans+=val[i];
- continue;
- }
- disNode[dis[i]].push_back(i);
- mx = max(mx,dis[i]);
- }
- priority_queue<int > heap;
- for(int i=mx;i>=1;i--){
- for(auto x:disNode[i])
- heap.push(val[x]);
- if(!heap.empty()){
- ans+=heap.top();
- heap.pop();
- }
- }
- cout << ans << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment