题意是求将所有点联通所花费的最小金额,如不能完全联通,输出 -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)的更多相关文章

  1. Hdu 3371 Connect the Cities(最小生成树)

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 其实就是最小生成树,但是这其中有值得注意的地方:就是重边.题目没有告诉你两个城市之间只有一条路可走, ...

  2. hdu 3371 Connect the Cities(最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3371 984ms风险飘过~~~ /************************************ ...

  3. HDU 5723 Abandoned country 最小生成树+搜索

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  4. 模板——最小生成树kruskal算法+并查集数据结构

    并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...

  5. 最小生成树——Kruskal与Prim算法

    最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...

  6. 【转】最小生成树——Kruskal算法

    [转]最小生成树--Kruskal算法 标签(空格分隔): 算法 本文是转载,原文在最小生成树-Prim算法和Kruskal算法,因为复试的时候只用到Kruskal算法即可,故这里不再涉及Prim算法 ...

  7. HDU 3371 Connect the Cities(并查集+Kruskal)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3371 思路: 这道题很明显是一道最小生成树的题目,有点意思的是,它事先已经让几个点联通了.正是因为它先 ...

  8. hdu 3371 Connect the Cities (最小生成树Prim)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3371 题目不难 稍微注意一下 要把已经建好的城市之间的花费定义为0,在用普通Prim算法就可以了:我没 ...

  9. hdu 3371(kruskal)

    Connect the Cities Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. [WC2011]最大XOR和路径(贪心+线性基)

    题目大意:给一张无向图,求一条1-n的路径,是路径边权的异或和最小. 题解 这道题的思路很妙,首先我们可以随便找出一条从1到n的路径来,然后我们可以选一些环. 其实不管这个环和这条路径有怎样的关系,我 ...

  2. 20165223 2017-2018-2《Java程序设计》课程总结

    目录 每周作业链接汇总 实验报告链接汇总 自我剖析总结感悟 代码托管截图与链接 课堂项目实践 课后项目实践 课程收获与不足 学习建议 问卷调查 二维码链接 每周作业链接汇总 预备作业1:我期望的师生关 ...

  3. macOS在virtualenv中使用wxPython报错

    在虚拟的Python环境中运行GUI的软件报错 This program needs access to the screen. Please run with a Framework build o ...

  4. 洛谷P2831 愤怒的小鸟 + 篮球比赛1 2

    这三道题一起做,有一点心得吧. 愤怒的小鸟,一眼看上去是爆搜,但是实现起来有困难(我打了0分出来). 还有一种解法是状压DP. 抛物线一共只有那么多条,我们枚举抛物线(枚举两个点),这样就能够预处理出 ...

  5. 【洛谷P3810】陌上花开

    题目大意:给定一个三维空间点的坐标,求对于任意一个点三维均小于等于这个点的点个数. 题解:学会了简单的 cdq 分治. 首先,先将第一维从小到大排序,再用类似归并排序的操作对第二维进行排序,在第二维合 ...

  6. Java 对远程文件的操作

    首先添加jar <dependency> <groupId>jcifs</groupId> <artifactId>jcifs</artifact ...

  7. c# WebApi之身份验证:Basic基础认证

    为什么需要身份认证 身份认证是为了提高接口访问的安全性,如果没有身份验证,那么任何匿名用户只要知道服务器的url,就可以随意访问服务器,从而访问或者操作数据库,这会是很恐怖的事. 什么是Basic基础 ...

  8. Django(十六)Form组件扩展

    http://www.cnblogs.com/wupeiqi/articles/6144178.html Form组件 - form表单(验证:保留上次内容) - - Ajax(验证:无需上次内容) ...

  9. JavaScript(JS)基本语法(一)

    https://www.cnblogs.com/haiyan123/p/7577598.html 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入 ...

  10. Redis高并发和快速的原因

    一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间:   3.redis使用多路复用技术,可以处理并发的连接 ...