1. 程式人生 > >893C. Rumor#謠言傳播(賦權無向圖&搜索)

893C. Rumor#謠言傳播(賦權無向圖&搜索)

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 int
ans=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#謠言傳播(賦權無向圖&搜索)