zoukankan      html  css  js  c++  java
  • CodeForces

    <题目链接>

    题目大意:

    有n个人,其中有m对朋友,现在你有一个秘密你想告诉所有人,第i个人愿意出价a[i]买你的秘密,获得秘密的人会免费告诉它的所有朋友(他朋友的朋友也会免费知道),现在他们想出最少的价钱买秘密,那么你最少能得到多少钱?

    解题分析:

    题意很明显,就是求出每个块最低的价格,然后将这些价格相加就行,处理的时候,我们对并查集根的值进行更新,记录该根所对应块中的最低价格。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <algorithm> 
     5 using namespace std;
     6 
     7 #define N int(1e5+10)
     8 typedef long long ll;
     9 int n,m;
    10 ll val[N],fa[N];
    11 int find(int x){
    12     if(fa[x]==x)return x;
    13     return fa[x]=find(fa[x]);
    14 }
    15 void Merge(int a,int b){
    16     int f1=find(a); 
    17     int f2=find(b);
    18     if(f1!=f2){
    19         fa[f2]=f1;
    20     }
    21 }
    22 int main(){
    23     cin>>n>>m;
    24     for(int i=1;i<=n;i++)
    25         cin>>val[i];
    26     for(int i=1;i<=n;i++)fa[i]=i;
    27     for(int i=1;i<=m;i++){
    28         int u,v;cin>>u>>v;
    29         Merge(u,v);
    30     }
    31     for(int i=1;i<=n;i++){
    32         int rt=find(i);
    33         if(val[i]<val[rt])val[rt]=val[i];
    34     }
    35     ll sum=0;
    36     for(int i=1;i<=n;i++){
    37         if(fa[i]==i)sum+=val[i];
    38     }
    39     cout<<sum<<endl;
    40 }

    2018-04-02


    作者:is_ok
    出处:http://www.cnblogs.com/00isok/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    树状数组基础
    Color the ball HDU1556
    敌兵布阵 HDU1166
    线段树基础
    T9 HDU1298
    7-6 Bandwidth UVA140
    测试方法:
    测试过程:
    爬天极网美女图片缩略图:
    爬天极网美女预览图版一:
  • 原文地址:https://www.cnblogs.com/00isok/p/8698449.html
Copyright © 2011-2022 走看看