时间限制: 
10000ms

单个测试点时间限制: 
1000ms

内存限制: 
512000kB
描述

华北电力大学可以抽象为一张有n个点m条边的无向图.

现在所有的边都断了. 修复每条边都有个不同的代价w_i.

求让所有点都能互相到达的最小代价和.

输入
第一行两个正整数 n, m 表示顶点数和边数

接下来m行每行三个正整数 u v w 表示一条边 (u和v是边的端点, w是边权)

输出
输出一行一个正整数表示答案
样例输入
  1. 2 2
  2. 1 2 2
  3. 2 1 3
样例输出
  1. 2
提示
n ≤ 10^5, m ≤ 3*10^5, w ≤ 10^4 保证有解
来源
laekov
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. using namespace std;
  7. const int MAXN=;
  8. const int maxn=0x3f;
  9. void read(int &n)
  10. {
  11. char c='+';int x=;bool flag=;
  12. while(c<''||c>''){c=getchar();if(c=='-')flag=;}
  13. while(c>=''&&c<='')
  14. x=(x<<)+(x<<)+c-,c=getchar();
  15. flag==?n=-x:n=x;
  16. }
  17. struct node
  18. {
  19. int u,v,w,nxt;
  20. }edge[MAXN];
  21. int head[MAXN];
  22. int num=;
  23. int add_edge(int x,int y,int z)
  24. {
  25. edge[num].u=x;
  26. edge[num].v=y;
  27. edge[num].w=z;
  28. edge[num].nxt=head[x];
  29. head[x]=num++;
  30. }
  31. int n,m;
  32. int vis[MAXN];
  33. int dis[MAXN];
  34. struct pr
  35. {
  36. int p,v;
  37. pr()
  38. {p=v=;}
  39. pr(int a,int b)
  40. {p=a;v=b;}
  41. bool operator<(const pr&a)const
  42. {return v>a.v;}
  43. }inc;
  44. void prime()
  45. {
  46. //vis[1]=1;
  47. priority_queue<pr>q;
  48. memset(dis,maxn,sizeof(dis));
  49. dis[]=;
  50. q.push(pr(,));
  51. int ans=;
  52. // for(int i=head[1];i!=-1;i=edge[i].nxt)
  53. // q.push(pr(edge[i].v,edge[i].w));
  54.  
  55. for(int k=;k<=n;k++)
  56. {
  57. int pos;
  58. while(vis[q.top().p]&&q.size()>=)
  59. q.pop();
  60.  
  61. pos=q.top().p;
  62. vis[pos]=;
  63. ans+=dis[pos];
  64. for(int i=head[pos];i!=-;i=edge[i].nxt)
  65. if(vis[edge[i].v]==&&dis[edge[i].v]>edge[i].w)
  66. {
  67. dis[edge[i].v]=edge[i].w;
  68. q.push(pr(edge[i].v,edge[i].w));
  69. }
  70.  
  71. }
  72. printf("%d",ans);
  73. }
  74. int main()
  75. {
  76. read(n);read(m);
  77. memset(head,-,sizeof(head));
  78. for(int i=;i<=m;i++)
  79. {
  80. int x,y,z;
  81. read(x);read(y);read(z);
  82. add_edge(x,y,z);
  83. add_edge(y,x,z);
  84. }
  85. prime();
  86. return ;
  87. }

07:清泉-改(prime+堆)的更多相关文章

  1. NOIP2016考前做题(口胡)记录

    NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...

  2. jacob访问ocx控件方法和遇到的问题

    最近在进行摄像机的二次开发,摄像机厂商提供了使用C++开发的ocx控件:所以尝试使用jacob来进行访问. 操作步骤如下: 1, 从官网(http://sourceforge.net/projects ...

  3. POJ1258 基础最小生成树

    本文出自:http://blog.csdn.net/svitter 题意:给出一个数字n代表邻接矩阵的大小,随后给出邻接矩阵的值.输出最小生成树的权值. 题解: prime算法的基本解法: 1.选择一 ...

  4. asp.net core 系列之并发冲突

    本文介绍如何处理多个用户并发更新同一实体(同时)时出现的冲突 . 主要是两种:一种,检查属性并发冲突,使用 [ConcurrencyCheck] ;另一种,检测行的并发冲突,使用 rowversion ...

  5. 通过__block的作用深入研究block

    block普通引用 默认情况下,在block中访问外部变量是通过复制一个变量来操作的,既可以读,但是写操作不对原变量生效,下面通过代码来举证 NSString *a = @"testa&qu ...

  6. 【POJ3635】Full Tank 优先队列BFS

    普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...

  7. 应用程序发生异常 unknown software exception (0xc00000fd)... - 栈溢出(Stack overflow)

    今天在写程序的时候,弹出这样的提示对话框: 应用程序发生异常 unknown software exception (0xc00000fd): 相关代码是这样,在一个函数中读取一个csv文件,先根据这 ...

  8. 【LeetCode】065-验证数字

    写在前面 前面研究OS的经历实在是令人心力憔悴..所以换个新鲜的,把自己的刷题感悟整理一番.刷了有些题了,就先拿最近几天hard题打头阵吧.首先说的是(065)Valid Number这个题,其实一眼 ...

  9. JavaScript筑基篇(二)->JavaScript数据类型

    说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...

随机推荐

  1. 7.treeview

    ui mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include < ...

  2. JVM源码分析之javaagent原理完全解读--转

    原文地址:http://www.infoq.com/cn/articles/javaagent-illustrated 概述 本文重点讲述javaagent的具体实现,因为它面向的是我们Java程序员 ...

  3. Oracle 新手语法记录

    一.用户 1. 创建用户 语法:create user 用户名 identified by 口令; create user test identified by test; 2. 修改用户 语法:al ...

  4. Js radio

    <input type="radio" name="sex" value="1" />男 <input type=&quo ...

  5. SQlException 对象名无效

  6. T7316 yyy的最大公约数(者)

    题目背景 全场基本暴力 题目描述 输入输出格式 输入格式: 如图 输出格式: 如图 输入输出样例 输入样例#1: 如图 输出样例#1: 如图 说明 如图 这题用到了容斥原理和线性筛的一些东西, 表示没 ...

  7. 移动web中的流式布局和viewport知识介绍

    1   流式布局 其实  流式布局  就是百分比布局,通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充. 这样的布局方式  就是移动web开发使用的常用布局方式 ...

  8. DirectUI界面编程(六)实现右键弹出菜单

    本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...

  9. android 双击图片变大,缩放功能

    package com.example.administrator.myapplicationphotochange; /** * Created by Administrator on 2016/8 ...

  10. struts2的DTD配置文件

    新手可以看看,高手可以跳过…… 最近在学习struts2这个框架,自己也动手写过一些DTD文件,所以很好struts2这个DTD文件是怎么写的,接下来就一个一个的分析 根元素是struts,然后又4个 ...