Problem 2087 统计树边

Accept: 212    Submit: 651
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

在图论中。树:随意两个顶点间有且仅仅有一条路径的图。

生成树:包括了图中全部顶点的一种树。

最小生成树:对于连通的带权图(连通网)G,其生成树也是带权的。

生成树T各边的权值总和称为该树的权,权最小的生成树称为G的最小生成树(Minimum Spanning Tree)。最小生成树可简记为MST。

可是。对于一个图而言。最小生成树并非唯一的。

如今,给你一个连通的有权无向图,图中不包括有自环和重边,你的任务就是寻找出有多少条边,它至少在一个最小生成树里。图保证连通。

 Input

输入数据第一行包括一个整数T,表示測试数据的组数。对于每组測试数据:

第一行包括两个整数n,m(1<n<100000,n-1<m<100000)。接下来m行。每行三个整数a,b,v(1<=a,b<=n,1<v<500),表示第i条路线连接景点A和景点B,距离是V。

两个数字之间用空格隔开。

 Output

对于每组測试数据。输出一行。包括一个整数,表示满足条件的边的个数。

 Sample Input

1
4 5
1 2 101
1 3 100
2 3 2
2 4 2
3 4 1

 Sample Output

4

 Source

福州大学第九届程序设计竞赛

思路:用kruskal算法模拟生成树的过程。

同一时候也是一个贪心生成树的过程,我们知道。生成的树的边权值和是一定的。那么对于边的替换的值也是可以确定的:仅仅有权值同样的边才有可能是还有一种生成树方法的边。

然后我就呆萌的记录有多少重边权值的边,然后加上n-1,开开心心的提交,实力WA。

一组数据就能够干掉我:

3 3
1 2 1

1 2 2

2 3 1

所以记得一定不要跟我犯一样的错误,我们须要的是动态推断一条边权值同样的边是否能可能是还有一种生成树方法的边。

我们直接在kruskal算法过程中加上动态推断的成分就能够了。那么要怎样推断呢?遍历每一条边的时候,假设有同样权值的边。像kruskal一样的推断条件,推断这条边是否能增加生成树中就可以。

kruskal算法推断一条边是否可以贪心的增加生成树中:

        for(int i=0;i<m;i++){if(find(a[i].x)!=find(a[i].y)){zhongquanzhi+=a[i].w;merge(a[i].x,a[i].y);}}

我们对同权值的边推断是否能增加生成树中,而且别忘记对边要进行入树:

        for(int i=0;i<m;i=j){for(j=i;a[i].w==a[j].w;j++){if(find(a[j].x)!=find(a[j].y)){output++;}}for(j=i;a[i].w==a[j].w;j++){if(find(a[j].x)!=find(a[j].y)){merge(a[j].x,a[j].y);}}}

完整的AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int f[1000050];
struct path
{int x,y,w;
}a[100050];
int cmp(path a,path b)
{return a.w<b.w;
}
int find(int x)
{return f[x] == x ? x : (f[x] = find(f[x]));
}
void merge(int a,int b)
{int A,B;A=find(a);B=find(b);if(A!=B)f[B]=A;
}
int main()
{int t;scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){f[i]=i;}for(int i=0;i<m;i++){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);}sort(a,a+m,cmp);int output=0;int j;for(int i=0;i<m;i=j){for(j=i;a[i].w==a[j].w;j++){if(find(a[j].x)!=find(a[j].y)){output++;}}for(j=i;a[i].w==a[j].w;j++){if(find(a[j].x)!=find(a[j].y)){merge(a[j].x,a[j].y);}}}printf("%d\n",output);}
}

转载于:https://www.cnblogs.com/claireyuancy/p/7255470.html

FZU 2087 统计树边【MST相关】相关推荐

  1. 树状数组相关应用之区间更新单点查询问题

    区间更新单点查询 树状数组的基本应用是单点更新,区间查询(例如求区间和). 鉴于树状数组的空间复杂度和时间复杂度都比线段树小 而且代码也短 所以就有大神用强大的脑洞YY出了区间修改+单点查询的树状数组 ...

  2. 如何统计各个班级的相关数据(如班级排名、最高分等)呢?

    用永中电子表格统计学生成绩,如何统计各个班级的相关数据(如班级排名.最高分等)呢? 一.为了后面输入公式的方便,我们先定义两个名称: 1.选中班级名称数据所在的区域,然后将光标定在"编辑栏& ...

  3. 树状数组相关应用之二元变量结构体组队问题

    一维数组处理组队问题 此类问题的处理方法一般采用定一议二 POJ-1900:Moofest 思路: 树状数组 分析: 1 题目给定n头牛的听力v[i]. 现在规定两头你i和j如果要进行交流的话那么消耗 ...

  4. 树状数组相关应用之多叉树子树问题

    Poj-3321:Apple Tree 题意: 卡卡的房子外面有一棵苹果树.每年秋天,树上都会长出许多苹果.卡卡非常喜欢苹果,所以他一直在精心培育着这棵大苹果树. 这棵树有N个分叉,这些分叉由树枝相连 ...

  5. 树状数组相关应用之区间包含问题

    区间包含问题 对于一维区间问题一般是采用定一议二的方法 区间外包含问题:POJ-2481 对于此问题我们可以先按x升序排序(x值相同,y大的排在前面),保证之后输入的区间的左端必在之前输入区间之内,若 ...

  6. 树状数组相关应用之平面范围求和问题

    平面范围求和 此类问题实际上是树状数组推广到二维的情形 平面子矩阵求和:POJ-2352 此题是求[0–x][0–y]矩阵中除自身[x][y]外的求和 二维解法: #include <iostr ...

  7. 树状数组相关应用之逆序对问题

    求逆序对 一元逆序对问题:POJ-2299 此题本质是一个求逆序对问题,对于一个无序数列,我们按照其顺序依次输入,并在每次输入时通过树状数组对已输入数列在其后方的序列进行个数求和,即可得到逆序数(先输 ...

  8. 树分治树链剖分相关题目讨论

    预备知识 树分治,树链剖分 poj1741 •一棵有n个节点的树,节点之间的边有长度.方方方想知道,有多少个点对距离不超过m 题解 点分治模板题.详见我早上写的http://www.cnblogs.c ...

  9. zjoi 2008 树的统计——树链剖分

    比较基础的一道树链剖分的题 大概还是得说说思路 树链剖分是将树剖成很多条链,比较常见的剖法是按儿子的size来剖分,剖分完后对于这课树的询问用线段树维护--比如求路径和的话--随着他们各自的链向上走, ...

最新文章

  1. qchart画完以后删除_Unity2019基础教程:TileMap搭建像素画场景关卡
  2. irobot擦地机器人故障_自己动手修复 iRobot braava380t 电机故障
  3. 再学大话设计模式--附录(三)
  4. WEB开发者八项注意
  5. linux内核网络协议栈--数据包的网卡转发流程(二十七)
  6. linux环境双网卡主机路由配置
  7. bgb邻居关系建立模型_学习开发知识图谱中的长期关系依赖
  8. 关于计算机的英语作文九年级,实用的九年级英语作文合集6篇
  9. 腾讯、字节跳动展开拉锯战;网易云音乐称酷狗抄袭;谷歌不再开发云游戏 | 极客头条...
  10. java语言的优缺点
  11. 我的高拍仪自动阅卷系统
  12. 基于nacos搭建springboot 抽取axios
  13. 谷歌浏览器怎么开启硬件加速模式 硬件加速模式开启方法简述
  14. pdf服务器签章系统,PDF离线签章工具使用方法
  15. 看看月光blog2014年都搞些啥
  16. 车载导航应用的哪些计算机知识,三维模拟智能车载导航系统的设计与实现
  17. MAC下配置openCV
  18. 计算机管理usb出现问号,USB设备全部都是问号,求助?
  19. Cathy学习Java——反射和类的加载
  20. (unix网络编程)即时通讯工具二:服务端与客户端融合

热门文章

  1. iOS-获取通讯录联系人信息
  2. 自己写一个轻量的JqueryGrid组件
  3. 020-Json结构数据序列化异步传递
  4. virtualBox使用nat模式下ssh连接
  5. leetcode算法题--复数乘法
  6. mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享
  7. [2018.12.18]BZOJ1013 [JSOI2008]球形空间产生器sphere
  8. 从零开始单排学设计模式「策略模式」黑铁 II
  9. 《企业软件交付:敏捷与高效管理精要》——1.6 结论
  10. 使用HAproxy为阿里中间件做负载均衡。