nyoj 925 国王的烦恼(最小生成树)

/*
    题意:N个城市中每两个城市有多条路径连接,可是因为路径存在的天数是有限的!以为某条路经不存在了
    导致N个城市不能连通了,那么村名们就会抗议!问一共会有多少次抗议!

    思路:最小生成树....我们用最大边来建立树!只要有最大边将节点连接并保证连通!那么边权小的值
    就可以忽略了!最后将生成树中由(最大边组成的)去重(相同的值只有一次抗议)!这时剩下边的数值就是
    答案了!
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define M 10005
#define N 100005
using namespace std;
struct EDGE{
   int u, v, tt;
};

int f[N];
int n, m;
int getFather(int x){
   return x==f[x] ? x:f[x]=getFather(f[x]);
}

bool Union(int a, int b){
    int fa=getFather(a), fb=getFather(b);
    if(fa!=fb){
       f[fa]=fb;
       return true;
    }
    return false;
}

bool cmp(EDGE a, EDGE b){
   return a.tt > b.tt;
}

EDGE edge[N];
int xx[N];
int main(){
   while(scanf("%d%d", &n, &m)!=EOF){
        for(int i=1; i<=n; ++i)
           f[i]=i;
        for(int i=0; i<m; ++i)
           scanf("%d %d %d", &edge[i].u, &edge[i].v, &edge[i].tt);
        sort(edge, edge+m, cmp);//将边权按照从大到小排序!
        int cnt=0;
        for(int i=0; i<m; ++i)
           if(Union(edge[i].u, edge[i].v))
              xx[cnt++]=edge[i].tt;
        cnt=unique(xx, xx+cnt)-xx;//去重
        printf("%d\n", cnt);
   }
   return 0;
}
时间: 2024-09-16 23:28:34

nyoj 925 国王的烦恼(最小生成树)的相关文章

NYOJ 38(最小生成树)

原来是求二维数组的每行或者每列的最小值,不过需要主要的是如果是4个点,只需要3条边就可以完全连接起来了,所以只需要找3次就行了.4条边有一条边会重复,需要舍弃. 就用题目的测试数据比较,用二维数组保存点与点连接的距离.   就用i代表行,j代表列.会发现 i,j都是从第二行开始的.而且跟y=x 直线对称.为什么说只要找到每行或者每列的最小值就行了呢.假设最开始没有2这个点,此时1,3,4就是一个集合.然后新添加一个点2进去,此时的最短路径就是点2到这个集合的最短路径,然后看2能够跟集合里面的哪些

《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题

1.2 利用最小生成树及其扩展形式解题 设G=(V,E,ω)是连通的有权无向图(节点集为V,边集为E,边权集为ω),连通图G中包含所有节点,且只有V-1条边的连通子图即为G的生成树.边权值和最小的生成树称为最小生成树.在现实生活中,最小生成树的原理和算法有着广泛的应用.程序设计竞赛中与最小生成树有关的试题一般有两类: 1) 构建最小生成树. 2) 应用最小生成树原理优化算法. 本节除了深入研讨最小生成树的性质和求解方法外,还给出了三种特殊类型生成树: 1) 最优比率生成树. 2) 最小k度限制生

数据结构-最小生成树的答案错误,求解

问题描述 最小生成树的答案错误,求解 #include #include #define INFINTY 51//不知道怎么定义,才算无穷大 #define MAX_VERTEX_NUM 50 typedef struct { int a[MAX_VERTEX_NUM];//顶点向量 int edges[MAX_VERTEX_NUM[MAX_VERTEX_NUM];//邻接矩阵 int n,;//顶点数 }Graph; int Prim(Graph G){ int *a=(int *)mallo

在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为?

问题描述 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? A o(n^2) B o(n^3) C o(n) D o(n+e) 答案是o(n+e)...不理解..求过程 解决方案 不对,这题应该选A 求顶点的入度的时间复杂度为O(e)*n=O(n*e) 遍历顶点的时间复杂度是O(n^2) 相加是O(n^2+n*e)=O(n^2) 解决方案二: 详细的解释http://www.cskaoyan.com/redir

hdu4750Count The Pairs(最小生成树找瓶颈边)

/* 题意:就是给你一个图,图的每两个点都有多条路径,每一条路径中都有一条最大边, 所有最大边的最小边(也就是瓶颈边)就是这两点之间的val值!然后给你一个值f, 问有多少个顶点对的val>=f! (u,v) 和 (v, u)是不同的顶点对! 思路:最小生成树(kruskral)那么每两个节点(u,v)的瓶颈边就是这一棵树中u到v 的路径中的最大边值! 在利用并查集的过程中,A, B两个集合,如果有u属于A,v属于B,且u-v可以将 A-B集合连接起来,因为边值由小到大选取,那么以u-v边为瓶颈

以下五点解决你网站被降权的烦恼

现如今网站是越来越难做了,百度算法三天两头一更新,动不动在来个K站玩玩,可是苦了我们这些站长了.大家都知道这网站降权是件多么严重的事情,相信每一位站长都经历过这样的事情,说到降权严重的网站收录直接降为零,轻点的排名三到五页之间,更严重的就是排名直接K的无踪影.但是作为SEOer的我们必须认识到问题的严重性,无论如何都要尽最大努力将降权所带来的损失降到最少,下面小编要和大家一起来分享降权后应该注意的问题,五个方面解决你网站被降权的烦恼,让网站死而复生. 一.站内优化问题 一般来说网站被降权了多半和

模仿combox(select)控件 省去美化烦恼

select|控件 不用整天为美化select控件烦恼了. 1.可批量美化select控件. 2.可以有onchange句柄. 3.触发onchange的函数可带参数. 3.可以得到select的值. 4.可设置像select类似的滚动条(如大于或等于8个数目时出现滚动条) 5.可设置宽度和高度 API参考: //首先生成一个simulateSelect的实例 //构造函数的第一个可选参数为触发onchange的函数,其它的为onchange函数的参数; c = new simulateSele

my-shopping-home.com帮你解决写外贸开发信的烦恼!!收藏

my-shopping-home.com帮你解决写外贸开发信的烦恼!!收藏外贸开发,信顾名思义就是你第一次写给潜在客人的邮件,信函.而外贸开发信,则是你写给你的潜在客户的第一封信件,其目的是开发这个潜在客户,希望建立业务合作,收获订单,扩展业务. my-shopping-home.com帮你解决写外贸开发信的烦恼!!收藏外贸开发,信顾名思义就是你第一次写给潜在客人的邮件,信函.而外贸开发信,则是你写给你的潜在客户的第一封信件,其目的是开发这个潜在客户,希望建立业务合作,收获订单,扩展业务.外贸开

米晓彬:青年百度之烦恼!

本想写一篇<少年百度之烦恼>,感觉题目有点熟,网上一搜,原来人家IT时代周刊已经写过了.百度上市已经两年了,按照互联网上一年顶七年的算法,百度已经是青少年了,现在孩子成熟的快,百度成熟的更快,索性就写一篇<青年百度之烦恼>. 我们先回想一下,少年百度都有啥烦恼:竞价排名抗议事件.闪电裁员事件.与天极网和搜狐的口水战,最后连遇害的女员工都被拿出来恶炒,把06年的百度还真折腾够呛. 今年,百度长大了,青年百度又有啥烦恼呢? 第一个当推报告门 今年6月,北京正望咨询有限公司发布的<