博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ1083][SCOI2005]繁忙的都市
阅读量:5882 次
发布时间:2019-06-19

本文共 1518 字,大约阅读时间需要 5 分钟。

BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=1083

 

这题就是一道最小生成树的裸题

我使用的是 $ kruskal $ 算法。

题目的第一问就是 $ n - 1 $ ,这个是很显然的。

第二问就跑一下 $ kruskal $ 就行了。

$ code $

# include 
# include
# include
# include
# include
# define ll long long# define rg register# define il inlineusing namespace std;const int maxM = 300 * 300 + 10; struct Edge{ int frm; int to; int val;}edge[maxM];il void add_edge(int, int, int);il int kr();il bool cmp(Edge, Edge);int find(int);void join(int, int);int n, m, tot = 0, pre[maxM];int main(){ scanf("%d%d", &n, &m); for(rg int i = 1; i <= n; ++ i) pre[i] = i; for(rg int i = 0; i < m; ++ i) { rg int x, y, z; scanf("%d%d%d", &x, &y, &z); add_edge(x, y, z); } sort(edge, edge + tot, cmp); printf("%d %d", n - 1, kr());}il void add_edge(int x, int y, int z){ edge[tot].frm = x; edge[tot].to = y; edge[tot ++].val = z;}il bool cmp(Edge a, Edge b){ return a.val < b.val;}il int kr(){ rg int ans; for(rg int i = 0; i < m; ++ i) { rg int u = find(edge[i].frm); rg int v = find(edge[i].to); if(u != v) { join(u, v); ans = edge[i].val; } } return ans;}int find(int x){ if(x != pre[x]) pre[x] = find(pre[x]); return pre[x];}void join(int x, int y){ x = find(x), y = find(y); pre[x] = y;}

 

转载于:https://www.cnblogs.com/Xray-luogu/p/9775295.html

你可能感兴趣的文章
Announcing the new Office 365 admin center
查看>>
小白经营网站的前前后后
查看>>
Spring MVC 教程,快速入门,深入分析——如何实现全局的异常处理
查看>>
单用户模式修改密码
查看>>
微信小程序帮你赚到第一桶金
查看>>
mac下安卓开发环境搭建
查看>>
学习之华丽的注册按钮➕倒计时
查看>>
Vim 中使用 OmniComplete 为 C/C++ 自动补全(部分增加)
查看>>
初识Hadoop
查看>>
Oracle之内存结构(SGA、PGA)
查看>>
Binary Search Tree IN C
查看>>
jquery之trigger()
查看>>
Spring源码浅析之事务(四)
查看>>
我的友情链接
查看>>
[APM] 2个实例+5个维度解读APM技术
查看>>
Jndi配置数据源
查看>>
华为交换机端口链路类型简析——access、trunk、hybrid
查看>>
[转载] Live Writer 配置写 CSDN、BlogBus、cnBlogs、163、sina 博客
查看>>
2013年SEO集群最新优化工具
查看>>
SQL:连表查询
查看>>