893C. Rumor#謠言傳播(賦權無向圖&搜索)
阿新 • • 發佈:2017-12-17
ble pan 要求 amp color nbsp style n) def
題目出處:http://codeforces.com/problemset/problem/893/C
題目大意:一個城中有一些關系圈,圈內會傳播謠言,求使每個人都知道謠言的最小花費
#include <bits/stdc++.h> using namespace std; //賦權無向圖 $DFS||BFS int _sol(int m,int n[]){ if(n[m]==m)return m; return n[m]=_sol(n[m],n); } int main(){ int n,m,p[100010],a[100010],l,r;//p為標記。a為權 long long intans=0; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; p[i]=i; } while(m--){//將有關系的規劃給同一個人,要求此人權值最小 cin>>l>>r; l=_sol(l,p);//無向圖間接連通 r=_sol(r,p); if(a[r]<a[l])//有關系的兩個人之間比較權值(貪心) p[l]=r;else p[r]=l; } ans=0; for(int i=1;i<=n;i++) if(p[i]==i) ans+=a[i]; cout<<ans; }
本題考察圖的遍歷,關鍵在於朋友圈的建立
893C. Rumor#謠言傳播(賦權無向圖&搜索)