P1223 [小数据版]边权差值最小的生成树
这道题和最小生成树kruskal的代码几乎相同,只不过不一定是最小生成树,所以不一定从最短的边开始做生成树;所以将每一条边分别作为起点,然后枚举就行了......
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 0x3f3f3f3f
- inline int read()
- {
- int x = ,ff = ;char ch = getchar();
- while(!isdigit(ch))
- {
- if(ch == '-') ff = -;
- ch = getchar();
- }
- while(isdigit(ch))
- {
- x = (x<<) + (x<<) + (ch ^ );
- ch = getchar();
- }
- return x * ff;
- }
- inline void write(int x)
- {
- if(x < ) putchar('-'),x = -x;
- if(x > ) write(x / );
- putchar(x % + '');
- }
- struct node
- {
- int x,y,v;
- }e[];
- int a,b,x,y,v,m = ,fa[],mi = INF;
- inline bool cmp(node x,node y)
- {
- return x.v < y.v;
- }
- int get(int x)
- {
- return (x == fa[x]) ? x : (fa[x] = get(fa[x]));
- }
- int Kruskal(int ans)
- {
- int maxx = -,minn = INF;
- for(int i = ;i <= a;++i)
- fa[i] = i;
- int sum = ,cnt = ;
- sort(e + ,e + m + ,cmp);
- for(int i = ans;cnt < a - ;++i)
- {
- ++sum;
- if(sum > m) return -; // 所有的边都找过,不能构成树;
- int x = get(e[i % m].x),y = get(e[i % m].y); // i可能大于m,所以用i % m;
- if(x != y)
- {
- ++cnt;
- fa[x] = y;
- maxx = max(maxx,e[i % m].v);
- minn = min(minn,e[i % m].v);
- }
- }
- return maxx - minn;
- }
- int main()
- {
- a = read(); b = read();
- for(int i = ;i <= b;++i)
- {
- x = read(); y = read(); v = read();
- e[++m].x = x; e[m].y = y; e[m].v = v;
- }
- for(int i = ;i <= m;++i)
- mi = min(mi,Kruskal(i)); // 枚举不同的起点
- write(mi);
- return ;
- }
P1223 [小数据版]边权差值最小的生成树的更多相关文章
- 【poj3522-苗条树】最大边与最小边差值最小的生成树,并查集
题意:求最大边与最小边差值最小的生成树.n<=100,m<=n*(n-1)/2,没有重边和自环. 题解: m^2的做法就不说了. 时间复杂度O(n*m)的做法: 按边排序,枚举当前最大的边 ...
- Poj 3522 最长边与最短边差值最小的生成树
题意: 让你求一颗生成树,使得最长边和最短边长度差值最小. 思路: 额!!!感觉这个思路会超时,但是ac了,暂时没什么别的好思路,那么就先说下这个思路,大牛要是有好的思路希望能在 ...
- LD1-K(求差值最小的生成树)
题目链接 /* *题目大意: *一个简单图,n个点,m条边; *要求一颗生成树,使得其最大边与最小边的差值是所有生成树中最小的,输出最小的那个差值; *算法分析: *枚举最小边,用kruskal求生成 ...
- 基于visual Studio2013解决面试题之1101差值最小
题目
- find the most comfortable road(并差集,找差值最小的权值)
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 将元素平分成差值最小的两个集合(DP)
现有若干物品,要分成较为平均的两部分,分的规则是这样的: 1)两部分物品的个数最多只能差一个. 2)每部分物品的权值总和必须要尽可能接近. 现在请你编写一个程序,给定现在有的物品的个数以及每个物品的权 ...
- 传说中的华为Python笔试题——两等长整数序列互换元素,序列和的差值最小(修正)
有两个序列a,b,大小都为n,序列元素的值任意整形数,无序:要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小. 1. 将两序列合并为一个序列,并排序,得到source ...
- 奇妙的算法【10】TX--有效号码、最,小耗时、最小差值、差值输出、异或结果
昨晚刚刚写的几道算法题,难度也还行,就是全部AC有些困难,当时第一题AC.第二题AC 60%,第四题AC 40%,第五题没有时间写完了,这个应该全部AC了:其中第三题没有写出来 1,是否存在符合规范的 ...
- python之小数据池
代码块 Python 程序 是由代码块构造的.块是一个python程序的文本,它是作为一个执行单元的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...
随机推荐
- Java学习之String StringBuffer StringBuilder区别
1.String:对象长度是不可变的,是线程安全. 2.StringBuffer:对象长度是可变的,是线程安全. 3.StringBuilder:对象长度是可变,不是线程安全.
- h5 录音 自动生成proto Js语句 UglifyJS-- 对你的js做了什么 【原码笔记】-- protobuf.js 与 Long.js 【微信开发】-- 发送模板消息 能编程与会编程 vue2入坑随记(二) -- 自定义动态组件 微信上传图片
得益于前辈的分享,做了一个h5录音的demo.效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: 点击发送 将录音内容发送到对话框中.点 ...
- 聊聊高并发(二十四)解析java.util.concurrent各个组件(六) 深入理解AQS(四)
近期总体过了下AQS的结构.也在网上看了一些讲AQS的文章,大部分的文章都是泛泛而谈.又一次看了下AQS的代码,把一些新的要点拿出来说一说. AQS是一个管程.提供了一个主要的同步器的能力,包括了一个 ...
- hunnu--11545--小明的烦恼——找路径
小明的烦恼--找路径 Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: ...
- Linux编程---进程通信
Linux的通信方式主要有分类有以下几种: -匿名管道和FIFO有名管道 -消息队列,信号量和共享存储 -套接字 对于套接字的进程通信,我就留在套接字的文章中再写了. 一.管道 管道是最古老的进程通信 ...
- wxpython中控件对键盘输入无响应的可能原因
问题描述: 开发环境:Win7 32bit + Python2.7.6 + WxPython 3.0.1-b20140707 开发某初级CAD软件中,需要实现点击TreeCtrl控件的相应选择,实现G ...
- 如何在外部采用AES-128对HLS的TS流进行加密
http://www.wowza.cn/hls/howToSecureHlsByAes128External
- 基于mac系统的apacheserver的使用流程
打开终端.输入下面命令:sudo apachectl start 此时Apache已经开启.在浏览器中输入本地ip地址能够看到it works! 打开前往----电脑------Macintosh H ...
- Printf可变參数使用
參考文档: http://bbs.csdn.net/topics/70288067 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源 本文的二 ...
- Java中的常用异常处理方法
觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 ...