uvaLive6837 ThereIsNoAlternative (kruskal)
题意:给一个联通图,求出不可替代的边,即存在于所有最小生成树中的边,的数量和它们边权之和
首先kruskal跑出一个最小生成树,枚举其中所有的边,若把这条边去掉以后再跑kruskal答案不是最小,则这条边就是不可替代的
复杂度:O(MlogM+N*N)
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std;
const int maxN=,maxM=; typedef struct{
int a,b,l;
} Edge; int bcj[maxN];
int n,m;
Edge eg[maxM];
int ts[maxN]; bool cmp(Edge a,Edge b){
return a.l<b.l;
} int getf(int i){
return i==bcj[i]?i:(bcj[i]=getf(bcj[i]));
} void add(int a,int b){
bcj[getf(a)]=getf(b);
} int OPRATE(int rmvd){
int i,j,num=,re=;
for(i=;i<=n;i++) bcj[i]=i;
i=;
while(num<n-){
if(i!=rmvd && getf(eg[i].a)!=getf(eg[i].b)){
add(eg[i].a,eg[i].b);
re+=eg[i].l;
if(rmvd==-) ts[num]=i;
num++;
}
i++;
if(i>=m && num<n-) return -;
}
return re; } int main(){
int i,j,ansn,answ,min;
while(scanf("%d%d",&n,&m)==){
for(i=;i<m;i++){
scanf("%d%d%d",&eg[i].a,&eg[i].b,&eg[i].l);
}
sort(eg,eg+m,cmp);
min=OPRATE(-);
ansn=n-;answ=min;
for(i=;i<n-;i++){
if(OPRATE(ts[i])==min){
ansn--;
answ-=eg[ts[i]].l;
}
}
printf("%d %d\n",ansn,answ);
}
}
uvaLive6837 ThereIsNoAlternative (kruskal)的更多相关文章
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 权重最小生成树的思想与Kruskal算法
晚上做携程的笔试题,附加题考到了权重最小生成树.OMG,就在开考之前,我还又看过一遍这内容,可因为时间太紧,也从来没有写过代码,就GG了.又吃了眼高手低的亏.这不,就好好总结一下,亡羊补牢. 权重最小 ...
- 最小生成树 kruskal算法 codevs 1638 修复公路
1638 修复公路 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description A地区在地震过后,连接所有村庄的公 ...
- 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]
题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...
- NOIP2013货车运输[lca&&kruskal]
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 最小生成树的Kruskal算法实现
最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...
随机推荐
- Squid配置之使用帐号密码验证
转自: https://blog.csdn.net/atco/article/details/43448885 1.安装squid使用root用户进行操作.先使用rpm检测是否已经安装了sql ...
- PHP 高并发秒杀解决方案
本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)) 1:(正常流程,不做任何高并发处理),代码如下: <?php $_mysqli = ne ...
- vue上传图片到服务器
https://blog.csdn.net/qq_29712995/article/details/78839093(copy) HTML代码: <input accept="imag ...
- python之路--MRO和C3算法
一 . MRO(method resolution order) 多继承的一种方法,一种查找的顺序 在python3 里面是一种新类式MRO 需要用都的是C3算法 class A: pass clas ...
- Python OpenCV人脸识别案例
■环境 Python 3.6.0 Pycharm 2017.1.3 ■库.库的版本 OpenCV 3.4.1 (cp36) ■haarcascades下载 https://github.com/ope ...
- DAY01、计算机组成及操作系统
一.编程与编程的目的: 1.什么是语言?什么是编程语言? 语言是一事物与另一事物之间沟通的介质 编程语言就是程序员与计算机之间沟通的介质 2.什么是编程? 程序员把自己想要让计算机做的事用编程语言表达 ...
- 日历插件bootstrap-datetimepicker的使用感悟
首先队长先综述一下插件的使用三步流程:即 1.引入插件 2.使用jquery选择器选择目标标签 3.对目标标签绑定插件函数来触发插件 雷同于python中的库的使用(安装库 导入库 引用库) 下面 ...
- css瀏覽器私有前綴名
-webkit-:chrome,safari -o-:opera -moz-:firefox -ms-:ie
- 解决Safari页面缓存的问题
在开发一个移动应用的过程中,遇到问题:在订单确认页,用户点击 收货地址链接,跳转到地址选择页面,咋选一个地址,跳转回订单确认页,发现收货地址没有改变,还是最开始的地址. 用Android手机发现地址有 ...
- Spring Boot 构建电商基础秒杀项目 (十二) 总结 (完结)
SpringBoot构建电商基础秒杀项目 学习笔记 系统架构 存在问题 如何发现容量问题 如何使得系统水平扩展 查询效率低下 活动开始前页面被疯狂刷新 库存行锁问题 下单操作步骤多,缓慢 浪涌流量如何 ...