复习--最小生成树&&并查集
我个人比较喜欢Kruskal算法,所以就把这个方法写了一下,但过不了洛谷,70分。
思路是先全读入,再排序,一条一条加边。运用并查集。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct s{
int h;
int t;
int w;
};
int fa[];
bool cmp(s a,s b)
{
return a.w < b.w;
}
int find(int a)
{
if(fa[a] != a) //不是while
fa[a] = find(fa[a]);
return fa[a];
}
void un(int a,int b)
{
a = find(a);
b = find(b);
if(a != b)
fa[b] = a;
}
bool judge(int a,int b)
{
a = find(a);
b = find(b);
if(a != b)
return false;
else return true;
}
s side[];
int m,n,k,tot = ,num = ;
int main()
{
cin>>n>>k;
for(int i = ;i <= n;i++)
{
fa[i] = i;
}
for(int i = ;i <= k;i++)
{
cin>>side[i].h>>side[i].t>>side[i].w;
//tot += side[i].w;
}
sort(side + ,side + k + ,cmp);
tot = ;
for(int i = ;i <= k;i++)
{
if(judge(side[i].h,side[i].t) == false)
{
un(side[i].h,side[i].t);
tot += side[i].w;
num++;
}
if(num == n)
break;
}
cout<<tot<<endl;
return ;
}
/*
5 5
1 2 8
1 3 1
1 5 3
2 4 5
3 4 2
*/
再加一个并查集的板子,日后备用。
#include<iostream>
using namespace std;
int fa[],m,n,x,y,z;
int find(int a)
{
if(fa[a] != a)
fa[a] = find(fa[a]);
return fa[a];
}
bool judge(int a,int b)
{
a = find(a);
b = find(b);
if(a != b)
return false;
else
return true;
}
void un(int a,int b)
{
a = find(a);
b = find(b);
if(a != b)
fa[b] = a;
}
int main()
{
cin>>m>>n;
for(int i = ;i < m;i++)
fa[i] = i;
for(int i = ;i <n;i++)
{
cin>>x>>y>>z;
if(x == )
{
if(judge(y,z) == false)
un(y,z);
}
else
{
if(judge(y,z) == true)
cout<<"Yeah"<<endl;
else
cout<<"No,opps"<<endl;
}
}
return ;
}
复习--最小生成树&&并查集的更多相关文章
- UVA 1395 苗条的生成树(最小生成树+并查集)
苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...
- CSP 201703-4 地铁修建【最小生成树+并查集】
问题描述 试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市 ...
- 关于最小生成树(并查集)prime和kruskal
适合对并查集有一定理解的人. 新手可能看不懂吧.... 并查集简单点说就是将相关的2个数字联系起来 比如 房子 1 2 3 4 5 6 ...
- 【BZOJ4144】[AMPPZ2014]Petrol(最短路+最小生成树+并查集)
Description 给定一个n个点.m条边的带权无向图,其中有s个点是加油站. 每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满. q次询问,每次给出x,y,b,表示出发点是 ...
- bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】
读题两小时系列-- 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合 ...
- Regional Changchun Online--Travel(最小生成树&& 并查集)
Travel Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
- (最小生成树 并查集)P1111 修复公路 洛谷
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- Luogu P1195/P1892 口袋的天空/BOI团伙 【最小生成树/并查集】By cellur925
其实这俩题挺水的,团伙拿下了一血,但是感觉还是写一下博客比较好x. 一.团伙 题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是 ...
随机推荐
- 怎样用Fiddler模拟网络超时
转自:http://materliu.github.io/all/web/2014/04/28/fiddler-timeout.html 用fiddler模拟网络请求超时 用fiddler模拟网络 ...
- Eclipse中自动生成get/set时携带注释给get/set
Eclipse中自动生成get/set时携带注释给get/set 编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclips ...
- 扩增子图表解读3热图:差异菌、OTU及功能
热图是使用颜色来展示数值矩阵的图形.通常还会结合行.列的聚类分析,以表达实验数据多方面的结果. 热图在生物学领域应用广泛,尤其在高通量测序的结果展示中很流行,如样品-基因表达,样品-OTU相对丰度矩 ...
- CAD插入非等比例的图块
主要用到函数说明: _DMxDrawX::InsertBlock 向控件数据库中插入一个图块,不用它插入匿名块.详细说明如下: 参数 说明 BSTR pszDwgFileName 图块定义的dwg 文 ...
- CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据
IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...
- 远程连接阿里云服务器ping不通ip解决方案
搭建了阿里云服务器,发现本地ping不通,查看半天才发现,原来是在阿里云上的安全组少了些东西. 在出入方向上新建一个安全组,就可以搞定了.
- JS弹出子窗口
目的 在一个主窗口中,点击一个链接, 弹出一个子窗口 , 父窗口保留 在子窗口中点击关闭, 关闭子窗口. 子窗口的位置位于屏幕的中间 实现 main.html <!DOCTYPE html> ...
- 几校联考——day1题解
T1 约数的个数(好像不可提交) 如果一个整数a能够整除整数b,那么a叫做b的约数.现在有N(1 <= N <= 100,000)个整数,对于其中的每一个数,请找出它在其余N - 1个整数 ...
- 【codeforces 527A】Playing with Paper
[题目链接]:http://codeforces.com/contest/527/problem/A [题意] 让你每次从一个长方形里面截出一个边长为长方形的较短边的正方形; 然后留下的部分重复上述步 ...
- ActiveMQ学习总结(1)——ActiveMQ快速入门
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...