刷题刷到自闭,写个博客放松一下

题意:n个人,m对朋友,每寻找一个人传播消息需要花费相应的价钱,朋友之间传播消息不需要花钱,问最小的花费

把是朋友的归到一起,求朋友中花钱最少的,将所有最少的加起来。

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #define ll long long
5 using namespace std;
6
7 ll a[1000100];
8
9 struct lll
10 {
11 ll par,b,c;
12 }p[100100];
13
14 int cmp(lll x,lll y)
15 {
16 if(x.par==y.par) return x.b<y.b;
17 return x.par<y.par;
18 }
19
20 ll find(ll x)
21 {
22 if(x!=p[x].par) p[x].par=find(p[x].par);
23 return p[x].par;
24 }
25
26 void unionn(ll x,ll y)
27 {
28 ll fa=find(x);
29 ll fb=find(y);
30 if(fb==fa) return ;
31 if(p[fa].c<p[fb].c){
32 p[fa].par=fb;
33 }
34 else p[fb].par=fa;
35 if(p[fa].c==p[fb].c) p[fa].c++;
36 }
37
38 int main()
39 {
40 ll n,m;
41 while(scanf("%lld%lld",&n,&m)!=EOF){
42 memset(a,0,sizeof a);
43 memset(p,0,sizeof p);
44 for(ll i=1;i<=n;i++){
45 scanf("%lld",&a[i]);
46 p[i].par=i;
47 p[i].b=a[i];
48 p[i].c=0;
49 }
50 ll x,y;
51 for(ll i=0;i<m;i++){
52 scanf("%lld%lld",&x,&y);
53 unionn(x,y);
54 }
55 ll sum=0;
56 for(int i=1;i<=n;i++)
57 while(p[i].par!=i&&p[p[i].par].par!=p[i].par) //是同一类但是头不是老大 把头变为老大;
58 p[i].par=p[p[i].par].par;
59 sort(p+1,p+n+1,cmp); //把结构体按类排序,主要是同一类的花费少的在前
60 sum=p[1].b;
61 for(int i=2;i<=n;i++){
62 if(p[i].par!=p[i-1].par) sum+=p[i].b; //是同一类的加上花费最少的第一个 不是同一类就继续循环
63 }
64 printf("%lld\n",sum);
65 }
66 return 0;
67 }

CodeForces 893C (并查集板子题)的更多相关文章

  1. HDU 1232 并查集板子题

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  2. Zjnu Stadium HDU - 3047 带权并查集板子题

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; +; int ...

  3. 畅通工程 HDU - 1232 并查集板子题

    #include<iostream> #include<cstring> using namespace std; ; int p[N]; int find(int x) { ...

  4. Brain Network (easy)(并查集水题)

    G - Brain Network (easy) Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  5. 【HDU1231】How Many Tables(并查集基础题)

    什么也不用说,并查集裸题,直接盲敲即可. #include <iostream> #include <cstring> #include <cstdlib> #in ...

  6. poj1182 食物链(并查集 好题)

    https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...

  7. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  8. PAT甲级 并查集 相关题_C++题解

    并查集 PAT (Advanced Level) Practice 并查集 相关题 <算法笔记> 重点摘要 1034 Head of a Gang (30) 1107 Social Clu ...

  9. Codeforces Round #345 (Div. 2) E. Table Compression 并查集+智商题

    E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

随机推荐

  1. 【Flutter】可滚动组件简介

    前言 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误.为此,Flutter提供了多种可滚动组件(Scrollable Widget)用于 ...

  2. http-请求和响应报文的构成

    请求的构成: 1)请求方法URI协议/版本 2)请求头(Request Header) 3)请求正文 1)请求方法URI协议/版本 Request URL: http://localhost:8080 ...

  3. MySQL的CURD 增删改查

    添加 insert 语法: 单条:insert into 表名('字段1', '字段2', ...) values('值1', '值2', ...) 多条:insert into 表名('字段1', ...

  4. 【Linux】Centos7 安装redis最新稳定版及问题解决

    ------------------------------------------------------------------------------------------------- | ...

  5. 【MYSQL】win7安装mysql-5.7.10绿色版

    1.下载 :mysql下载地址 2.解压缩 3.环境变量配置 MYSQL_HOME=D:\mysql-5.7.11-win32 PATH=%MYSQL_HOME%\bin 4.修改配置文件 a.)将m ...

  6. 记一道C语言编程题(C语言学习笔记)

    题目如下 解答如下 #include <stdio.h> #include<math.h> double Mysqrt(double n) { return sqrt(n); ...

  7. toad for oracle自定义快捷sql

    View--->Toad Options--->Behavior--->Auto replace--->

  8. [Noip模拟题]Seq

    题目描述 由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载.有一群MM排队看hyf.每个MM都有自己独特的风格,由于hyf有着一颗包容的心,所以,什么风格的MM他都喜欢-- ...

  9. 二本学生拿到腾讯大厂offer的成长记录

    本人迈莫,是在20年以春招实习生的身份进入鹅厂,经过重重波折,最终成为鹅仔一份子.接下来我会以我亲生经历为例,分享一下普通大学的学生也是可以进去大厂,拭目以待!!! 初入大学 惨遭毒打 时间倒回到17 ...

  10. 微信小程序代码上传,审核发布小程序

    1.打开微信开发者工具 管理员扫码 -> 填写好小程序的项目目录.AppID(必须是客户已注册好的AppID).项目名称 2.在app.js中修改id(客户登录后台管理系统的id),app.js ...