题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3371

Problem Description
In 2100, since the sea level rise, most of the cities disappear. Though some survived cities are still connected with others, but most of them become disconnected. The government wants to build some roads to connect all of these cities again, but they don’t want to take too much money.  
 
Input
The first line contains the number of test cases.
Each
test case starts with three integers: n, m and k. n (3 <= n
<=500) stands for the number of survived cities, m (0 <= m <=
25000) stands for the number of roads you can choose to connect the
cities and k (0 <= k <= 100) stands for the number of still
connected cities.
To make it easy, the cities are signed from 1 to n.
Then follow m lines, each contains three integers p, q and c (0 <= c <= 1000), means it takes c to connect p and q.
Then
follow k lines, each line starts with an integer t (2 <= t <= n)
stands for the number of this connected cities. Then t integers follow
stands for the id of these cities.
 
Output
For each case, output the least money you need to take, if it’s impossible, just output -1.
 
Sample Input
1
6 4 3
1 4 2
2 6 1
2 3 5
3 4 33
2 1 2
2 1 3
3 4 5 6
 
Sample Output
1
 
Author
dandelion
 
Source
 /*
问题
输入已经存在的图以及将要增加的边及其花费,计算并输出最小生成树还需要的最小花费 解题思路
将现在的图连起来使得它们的花费为0,再加入将要建设的边,直接跑一边prim即可,注意不能构成最小生成树
的情况说出-1,代码中的u == -1 结束很关键。
*/
#include<cstdio>
#include<cstring> const int N=;
const int INF=;
int e[N+][N+],a[N],dis[N],bk[N];
int prim();
int n,m,k; int main(){
int T,i,j,q,t1,t2,t3,t;
scanf("%d",&T);
while(T--){
for(i=;i<=N;i++){
for(j=;j<=N;j++){
e[i][j] = i==j?:INF;
}
}
scanf("%d%d%d",&n,&m,&k);
for(i=;i<=m;i++){
scanf("%d%d%d",&t1,&t2,&t3);
if(e[t1][t2] > t3){
e[t1][t2] = t3;
e[t2][t1] = t3;
}
}
for(i=;i<=k;i++){
scanf("%d",&t);
for(j=;j<=t;j++){
scanf("%d",&a[j]);
}
for(j=;j<=t-;j++){
for(q=j+;q<=t;q++){
e[ a[j] ][ a[q] ]=;
e[ a[q] ][ a[j] ]=;
}
}
} /*for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%9d",e[i][j]);
}
printf("\n");
}*/
int ans=prim();
if(ans == -)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
} int prim()
{
int i;
for(i=;i<=n;i++)
dis[i]=e[][i];
memset(bk,,sizeof(bk));
bk[]=;
int c=,sum=,mina,u; while(c < n){
mina=INF;
u=-;
for(i=;i<=n;i++){
if(!bk[i] && dis[i] < mina){
mina=dis[i];
u=i;
}
}
//printf("u==%d\n",u);
if(u == -)
break;
bk[u]=;
c++;
sum += dis[u];
for(i=;i<=n;i++){
if(!bk[i] && dis[i] > e[u][i])
dis[i] = e[u][i];
}
}
if(u == -)
return -;
return sum;
}
 

HDU 3371 Connect the Cities(prim算法)的更多相关文章

  1. hdu 3371 Connect the Cities

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3371 Connect the Cities Description In 2100, since th ...

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

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

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

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

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

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

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

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

  6. HDU 3371 Connect the Cities 最小生成树(和关于sort和qsort的一些小发现)

    解题报告:有n个点,然后有m条可以添加的边,然后有一个k输入,表示一开始已经有k个集合的点,每个集合的点表示现在已经是连通的了. 还是用并查集加克鲁斯卡尔.只是在输入已经连通的集合的时候,通过并查集将 ...

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

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

  8. hdu 1102 Constructing Roads (Prim算法)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ...

  9. hdoj 3371 Connect the Cities

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

随机推荐

  1. Android记录10--android.os.NetworkOnMainThreadException异常解决办法

    2013年11月1日小光棍节 有一段时间没有发表新的博客了,最近一直在忙着开发新浪微博客户端遇到很多问题比较头痛,比如说本篇博客要讲的NetworkOnMainThreadException这个异常, ...

  2. 10 个免费的Bootstrap Admin 主题,模板收集

    In designing websites today, one of the must have frameworks is the twitter bootstrap. To those who ...

  3. 使用PerfView监测.NET程序性能(一):Event Trace for Windows

    前言: 在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大.无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CP ...

  4. 一不小心发现了个Asp.Net Bug

    1. Ver是页面定义的变量 2. asp.net 页面定义为  <link href="/company/them/page.css?v=<%=Ver%>" r ...

  5. UWP 多语言的三个概念

    首先了解一下 RFC4646 和 BCP-47 是什么东西: RFC4646 The name is a combination of an ISO 639 two-letter lowercase ...

  6. How do I convert an IIR filter into a FIR filter in digital signal processing?

    Maybe you were asking if there is some kind of design tool allowing to convert an IIR filter into an ...

  7. Android 使用 NYTimes Stores 缓存 network request

    NYTimes Stores 是一个缓存库,在 2017年的 AndroidMakers 大会上被介绍过. https://github.com/NYTimes/Store 实现一个 Disk Cac ...

  8. Linux基础命令-cd

    cd 作用:切换路径 切换至家目录 $ cd $ cd~ 在上一个目录和当前目录来回切换 $ cd - 切换至某用户的家目录 # cd ~ # pwd /root # cd ~quail #pwd / ...

  9. [ActionScript 3.0] 有必要记录一下:flash builder运用Animate CC 发布的swc的一个奇葩问题,亲测

    之前一直用flash cs6 发布swc 配合flash builder4.6开发,最近用Animate CC发布swc,却出现无法flash builder4.6 无法连接到调试器的问题, 经过反复 ...

  10. Vue 项目配置

    配置Vue的app项目首先需要配置本地环境. 1.下载node.js并且安装.(根据自己电脑参数进行选择) 打开cmd,检查是否安装成功. 分别输入: node -v npm -v 结果如图正确显示出 ...