uvaLive6837 ThereIsNoAlternative (kruskal)

时间:2021-08-29 23:12:27

题意:给一个联通图,求出不可替代的边,即存在于所有最小生成树中的边,的数量和它们边权之和

首先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)的更多相关文章

  1. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  2. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  3. 最小生成树(prim&amp&semi;kruskal)

    最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法:                  原始的加权连通图——————D被选作起点,选与之相连的权值 ...

  4. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  5. 权重最小生成树的思想与Kruskal算法

    晚上做携程的笔试题,附加题考到了权重最小生成树.OMG,就在开考之前,我还又看过一遍这内容,可因为时间太紧,也从来没有写过代码,就GG了.又吃了眼高手低的亏.这不,就好好总结一下,亡羊补牢. 权重最小 ...

  6. 最小生成树 kruskal算法 codevs 1638 修复公路

    1638 修复公路  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description A地区在地震过后,连接所有村庄的公 ...

  7. 洛谷P1991无线通讯网&lbrack;kruskal &vert; 二分答案 并查集&rsqb;

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  8. NOIP2013货车运输&lbrack;lca&amp&semi;&amp&semi;kruskal&rsqb;

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  9. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

随机推荐

  1. H264编码原理以及I帧、B和P帧详解

    H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点 ...

  2. winform datetimepacker 开始日期 结束日期 分类: WinForm 2014-07-15 19&colon;14 124人阅读 评论&lpar;0&rpar; 收藏

    dtpStart;//开始日期 dtpEnd;//结束日期 1:开始日期小于结束日期 加载dtpEnd的ValueChanged事件即可. //开始日期小于结束日期         private v ...

  3. JS控制文本框textarea输入字数限制的方法

    <html> <head runat="server"> <title></title> <script type=&quot ...

  4. 【CJOJ1644】【洛谷2758】编辑距离

    题面 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: 皆为小 ...

  5. 一个Java程序猿眼中的前后端分离以及Vue&period;js入门

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...

  6. Document&period;write和 getElementById&lpar;ID&rpar;

    在javascript中,document.write()方法:常用来网页向文档中输出内容. 示例:通过document.write()方法,向网页文档中输出了一段文字. document.write ...

  7. LD&lowbar;RUN&lowbar;PATH和LD&lowbar;LIBRARY&lowbar;PATH是干什么的&quest;

    1. 使用场合 LD_RUN_PATH在链接时使用 LD_LIBRARY_PATH在执行时使用 2. 如何指定环境变量 export LD_LIBRARY_PATH=/opt/jello/lib:$L ...

  8. ReactiveX 学习笔记(4)过滤数据流

    Filtering Observables 本文主题为过滤 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(三)Filtering Deb ...

  9. SAP 数据类型

    数据元素和基本类型对应关系 数据字典预置类型 ABAP类型 运行长度 说明 ACCP N(6) 6 会计计算周期 CHAR C(n) 1-255 字符 CLNT C(3) 3 集团,数据区域代码 CU ...

  10. 第一次使用autohotkey的记录

    第一次使用autohotkey的记录 原来想着直接用python来做模拟输入的,后面查了一下发现,目前的封装的库不一定能支持输入到游戏里,是的,我是打算用来做游戏辅助的,嘿嘿嘿 暂时来讲,我只是看完了 ...