题目链接:

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>

 ;
 ;
 ][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--){
         ;i<=N;i++){
             ;j<=N;j++){
                 e[i][j] = i==j?:INF;
             }
         }
         scanf("%d%d%d",&n,&m,&k);
         ;i<=m;i++){
             scanf("%d%d%d",&t1,&t2,&t3);
             if(e[t1][t2] > t3){
                 e[t1][t2] = t3;
                 e[t2][t1] = t3;
             }
         }
         ;i<=k;i++){
             scanf("%d",&t);
             ;j<=t;j++){
                 scanf("%d",&a[j]);
             }
             ;j<=t-;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();
         )
             printf("-1\n");
         else
             printf("%d\n",ans);
     }
     ;
 } 

 int prim()
 {
     int i;
     ;i<=n;i++)
         dis[i]=e[][i];
     memset(bk,,sizeof(bk));
     bk[]=;
     ,sum=,mina,u;

     while(c < n){
         mina=INF;
         u=-;
         ;i<=n;i++){
             if(!bk[i] && dis[i] < mina){
                 mina=dis[i];
                 u=i;
             }
         }
         //printf("u==%d\n",u);
         )
             break;
         bk[u]=;
         c++;
         sum += dis[u];
         ;i<=n;i++){
             if(!bk[i] && dis[i] > e[u][i])
                 dis[i] = e[u][i];
         }
     }
     )
         ;
     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(最小生成树)

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

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

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

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

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

  7. hdu 1102 Constructing Roads (Prim算法)

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

  8. hdoj 3371 Connect the Cities

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

  9. HDU 1863 畅通工程(Prim算法求解MST)

    题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...

随机推荐

  1. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (2)

    前文我们提到在Resource Manager模式中,虚拟机默认不再与云服务对应,也不再有类似xxx.cloudapp.net的二级域名.在Resource Manager模式中,虚拟机的网卡.公共I ...

  2. mysql常用命令(2)

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  3. JavaScript 类

    一.基础 //定义obj类 var obj = function(){ //声明v1成员 var v1 = ''; //声明get_v1方法,用this关键字定义 this.get_v1 = func ...

  4. Ajax 之【文件上传】

    // 前台 var formData = new FormData(); var file = document.getElementById('myFile').files[0]; formData ...

  5. &lt;五&gt; jQuery 效果

    显示隐藏 $("selector").show(speed, callback) $("selector").hide"(speed, callbac ...

  6. HTML标签_Form

    理解HTML是如何跳转到java程序中去的:Form常用HTML标签的作用<body> <form action="servlet/UploadServlet" ...

  7. js 两个日期比较相差多少天

    var day1 = new Date("2017-9-17"); var day2 = new Date("2017-10-18"); console.log ...

  8. LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度

    我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问 ...

  9. Winform 窗体实现圆角展示

    触发窗体的Resize事件,如下所示: #region 界面实现圆角 private void LoginForm_Resize(object sender, EventArgs e) { if (t ...

  10. Python闭包和装饰器再复习

    闭包 闭包的定义 在一个外函数中定义了一个内函数,并且内函数用到了外部函数的变量,而且外函数的返回值是内函数的引用,这就构成了一个闭包. 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东 ...