UVa 1395 苗条的生成树(Kruskal+并查集)
https://vjudge.net/problem/UVA-1395
题意:
给出一个n结点的图,求苗条度(最大边减最小边的值)尽量小的生成树。
思路:
主要还是克鲁斯卡尔算法,先仍是按权值排序,对于一个连续的边集区间[L,R],如果这些边使得n个点全部连通,则一定存在一个苗条度不超过W[R]-W[L]的生成树。从小到大枚举L,对于每个L,从小到大枚举R。
这道题目我一直超时,最后发现数组开小了,我一直以为数组开小了肯定会出来Runtime error的...
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = + ; int n, m, ans;
int p[maxn]; struct node
{
int u;
int v;
int w;
}edge[maxn*maxn]; int find(int x)
{
return p[x] == x ? x : find(p[x]);
} bool cmp(node a, node b)
{
return a.w < b.w;
} void init()
{
for (int k = ; k <= n; k++) p[k] = k;
} void Kruskal()
{
int ok = ;
sort(edge, edge + m, cmp);
for (int i = ; i <= m - n + ; i++)
{
int num = ;
init();
for (int j = i ; j < m; j++)
{
int x = find(edge[j].u);
int y = find(edge[j].v);
if (x != y)
{
p[x] = y;
num++;
}
if (num == n - )
{
ans = min(ans, edge[j].w - edge[i].w);
ok = ;
break;
}
}
while (edge[i].w == edge[i + ].w) i++;
}
if (!ok) printf("-1\n");
else printf("%d\n", ans);
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (scanf("%d%d",&n,&m))
{
if (n == && m == ) break;
for (int i = ; i<m ; i++)
{
scanf("%d%d%d", &edge[i].u, &edge[i].v , &edge[i].w);
}
ans = ;
Kruskal();
}
return ;
}
UVa 1395 苗条的生成树(Kruskal+并查集)的更多相关文章
- UVA 1395 苗条的生成树(最小生成树+并查集)
苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...
- Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...
- TOJ 2815 Connect them (kruskal+并查集)
描述 You have n computers numbered from 1 to n and you want to connect them to make a small local area ...
- Minimum Spanning Tree.prim/kruskal(并查集)
开始了最小生成树,以简单应用为例hoj1323,1232(求连通分支数,直接并查集即可) prim(n*n) 一般用于稠密图,而Kruskal(m*log(m))用于系稀疏图 #include< ...
- hdu 1863 畅通工程(Kruskal+并查集)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- [bzoj2443][Usaco2011 Open]奇数度数_树形dp_生成树_并查集
奇数度数 bzoj-2443 Usaco-2011 Open 题目大意:给定一个n个点m条便有向图,问是否有一种选出一些边的方式使得所有点的度数都是奇数. 注释:$1\le n \le 5\cdot ...
- POJ 3723 Conscription (Kruskal并查集求最小生成树)
Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14661 Accepted: 5102 Des ...
- [CF891C] Envy - Kruskal,并查集
给出一个 n 个点 m条边的无向图,每条边有边权,共 Q次询问,每次给出 \(k\)条边,问这些边能否同时在一棵最小生成树上. Solution 所有最小生成树中某权值的边的数量是一定的 加完小于某权 ...
- Uva 12361 File Retrieval 后缀数组+并查集
题意:有F个单词,1 <= F <=60 , 长度<=10^4, 每次可以输入一个字符串,所有包含该字串的单词会形成一个集合. 问最多能形成多少个不同的集合.集合不能为空. 分析:用 ...
随机推荐
- myeclipse连接并运行sql文件
1:在工程目录上右键>new >SQL File ,写入sql 2:在sql文件上面右键>execute sql files 3:选择数据库类型,并点击create创建一个连接: ...
- bootstrap modal插件弹出窗口如何限制最大高度,并且在内容过多时可以滚动显示
.modal-body{ max-height:400px; overflow-y:auto; } 只有在modal-body类上限制高度才能起作用,其他地方的限制均不起作用
- Thread类的常见问题
void waitForSignal() { Object obj = new Object(); synchronized(Thread.currentThread()) { obj.wait(); ...
- POJ:2049Finding Nemo(bfs+优先队列)
http://poj.org/problem?id=2049 Description Nemo is a naughty boy. One day he went into the deep sea ...
- OCR学习及tesseract的一些测试
最近接触OCR,先收集一些资料,包括成熟软件.SDK.流行算法. 1. 一个对现有OCR软件及SDK的总结,比较全面,包括支持平台.编程语言.支持字体语言.输出格式.相关链接等 http://en.w ...
- 使用SQLMAP对网站和数据库进行SQL注入攻击
from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介 ...
- JAVA 实现XML与JSON 相互转换
原文地址https://blog.csdn.net/congcong68/article/details/39029907 在工作中,经常碰到XML转为JSON或者JSON转为XML,在这过程中有时嵌 ...
- Android开发中,系统是如何区分不同的App的(转自csdn)
转自:http://bbs.csdn.net/topics/391868975?page=1 1判断是否为同一个app,仅仅是包名,签名是保证你的app不被第三方恶意替换.当包名相同,但签名不同时,系 ...
- 008-centos服务管理
- POST—GET—两种提交方式的区别
主要区别: 安全性 长度限制 数据结构. 总结起来: get方式:以URL字串本身传递数据参数,在服务器端可以从UERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来 ...