HDU 3371(城市联通 最小生成树-Kruskal)
题意是求将所有点联通所花费的最小金额,如不能完全联通,输出 -1
直接Kruskal,本题带来的一点教训是 rank 是algorithm头文件里的,直接做变量名会导致编译错误。没查到 rank 的具体用途......
#include <cstdio>
#include <iostream>
#include <algorithm> /*rank 是algorithm里的*/
using namespace std;
int father[],r[];
int n,m,k,ans;
struct edg
{
int from,to,money;
}e[];
int fd(int x)
{
if(x==father[x]) return x;
return fd(father[x]);
}
void makeset(int x)
{
for(int i = ; i <= x;i++)
{
father[i] = i;
r[i] = ;
}
}
void uon(int x,int y)
{
x = fd(x);
y = fd(y);
if(x!=y)
{
if(r[x] >= r[y])
{
father[y] = x;
r[x] += r[y];
r[y] = ;
}
else
{
father[x] = y;
r[y] += r[x];
r[x] = ;
}
}
}
bool cmp(edg x,edg y)
{
return x.money < y.money;
}
int main()
{
int t,p,len;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
makeset(n);
ans = ;
len = ;
for(int i = ; i <= m; i++)
scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].money);
for(int i = ; i <= k; i++)
{
scanf("%d",&p);
int a,b();
for(int u = ; u < p ;u++)
{
scanf("%d",&a);
if(u&&b) uon(a,b);
b = a;
}
}
sort(e+,e++m,cmp);
for(int i = ; i < m; i++)
if(fd(e[i].from)!=fd(e[i].to))
{
uon(e[i].from,e[i].to);
ans += e[i].money;
}
for(int i = ; i <= n; i++)
if(r[i] > ) len++; //检查所有点是否只有一个根,即是否存在未连在树上的点
if(len == ) printf("%d\n",ans);
else printf("-1\n");
}
return ;
}
HDU 3371(城市联通 最小生成树-Kruskal)的更多相关文章
- Hdu 3371 Connect the Cities(最小生成树)
地址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 其实就是最小生成树,但是这其中有值得注意的地方:就是重边.题目没有告诉你两个城市之间只有一条路可走, ...
- hdu 3371 Connect the Cities(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3371 984ms风险飘过~~~ /************************************ ...
- HDU 5723 Abandoned country 最小生成树+搜索
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 模板——最小生成树kruskal算法+并查集数据结构
并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...
- 最小生成树——Kruskal与Prim算法
最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...
- 【转】最小生成树——Kruskal算法
[转]最小生成树--Kruskal算法 标签(空格分隔): 算法 本文是转载,原文在最小生成树-Prim算法和Kruskal算法,因为复试的时候只用到Kruskal算法即可,故这里不再涉及Prim算法 ...
- HDU 3371 Connect the Cities(并查集+Kruskal)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 思路: 这道题很明显是一道最小生成树的题目,有点意思的是,它事先已经让几个点联通了.正是因为它先 ...
- hdu 3371 Connect the Cities (最小生成树Prim)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3371 题目不难 稍微注意一下 要把已经建好的城市之间的花费定义为0,在用普通Prim算法就可以了:我没 ...
- hdu 3371(kruskal)
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
随机推荐
- 【BZOJ4555】【TJOI2016】【HEOI2016】求和 第二类斯特林数 NTT
题目大意 求\(f(n)=\sum_{i=0}^n\sum_{j=0}^i2^j\times j!\times S(i,j)\\\) 对\(998244353\)取模 \(n\leq 100000\) ...
- bzoj 1103 : [POI2007]大都市meg (树链剖分+线段树)
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- 微信小程序原生开发简介
简介: 总结: 1. 逻辑层使用js引擎,视图层使用webview渲染 2. 微信小程序已经支持了绝大部分的 ES6 API 3. 可以自动补全css的兼容语法 文档:https://develope ...
- 关于一些没做出来的SBCF题
这里是一些我SB没做出来的CF水题. 其实这些题思维量还不错,所以写在这里常来看看…… 不一定每题代码都会写. CF1143C Queen 其实只要注意到如果一个点开始能被删,那一直就能被删:一个点开 ...
- Oracle数据库中遇到的坑
最近在帮别人忙写程序,用的是Oracle数据库,写一篇文章来说说在Oracle中遇到的一些坑: 1. PL/SQL develop的坑: 由于在这里工作环境是内网完全,无奈只能使用PL/SQL 工具, ...
- 【翻译】七个习惯提高Python程序的性能
原文链接:https://www.tutorialdocs.com/article/7-habits-to-improve-python-programs.html 掌握一些技巧,可尽量提高Pytho ...
- LOJ#2722 情报中心
解:有个暴力是枚举两条链然后O(n)判定,可以得到15分. 还可以优化一下,枚举一条链,然后第二条链直接求两端点树上带权距离.可以做到O(m(n + m)),但是我用的树剖,跟上面那一档没啥区别Orz ...
- semantic ui框架学习笔记一
面包屑导航 面包屑导航经常用于多个栏目下的内容管理,是web页面里比较常用的组合.例如: <div class="ui breadcrumb"> <a class ...
- Linux常用基本命令(less)
转: Linux常用基本命令(less) LESS:跟more命令的功能类似,都是用于分页显示内容,但是他的性能比more更高,功能比more更丰富,他读取文件是按需加载 格式: less [opti ...
- mysql 自定义函数与自定义存储过程的调用方法
存储过程:call 过程名(参数) 函数: select 函数名(参数)