这个时间短  700多s
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int u;
int v;
int w;
}que[100000];
int father[505];
bool cmp(struct node a,struct node b){
return a.w<b.w;
}
void init(int n){
for(int i=1;i<=n;i++)
father[i]=i;
}
int find(int u){
if(father[u]!=u)
father[u]=find(father[u]);
return father[u];
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,k;
int edge=0,sum=0;
scanf("%d%d%d",&n,&m,&k);
init(n);
for(int i=0;i<m;i++){
scanf("%d%d%d",&que[i].u,&que[i].v,&que[i].w);
}
sort(que,que+m,cmp);
for(int i=1;i<=k;i++){
int cnt,root;
scanf("%d%d",&cnt,&root);
for(int j=1;j<cnt;j++){
int x;
scanf("%d",&x);
int c1=find(x),c2=find(root);
if(c1!=c2){
father[c1]=c2;
}
}
}
for(int i=1;i<=n;i++)
if(father[i]==i)
edge++;
bool flag=false;
for(int i=0;i<m;i++){
int tx=find(que[i].u),ty=find(que[i].v);
if(tx!=ty){
father[tx]=ty;
sum+=que[i].w;
edge--;
}
if(edge==1){
flag=true;
break;
} }
if(flag)
printf("%d\n",sum);
else
printf("-1\n"); }
return 0;
}

Connect the Cities

Time Limit: 1000 MS Memory Limit: 32768 KB

64-bit integer IO format: %I64d , %I64u Java class name: Main

[Submit] [Status] [Discuss]

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

Source

HDOJ Monthly Contest – 2010.04.04
 
 
 
 
本题judge系统绝对坑的你无语,同一个代码,一会交上去过了,过了一会交上去就超时,绝对TLE的你没有脾气
什么也不想说了。在各种虚拟Oj里面提交,也是出现同样的问题,真是无语了
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int u,v,w;
}que[105000];
int father[505];
bool cmp( node a, node b){
return a.w<b.w;
}
void init(int n){
for(int i=1;i<=n;i++)
father[i]=i;
}
int find(int u){
if(father[u]!=u){
father[u]=find(father[u]);
}
return father[u];
} int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,k;///
int sum,edge;//这些变量我一定义在外部就会超时,只能定义在内部,那样也是飘过,980多s,好险好险
int uu,vv,ww;
scanf("%d%d%d",&n,&m,&k);
init(n);
for(int i=0;i<m;i++){
scanf("%d%d%d",&uu,&vv,&ww);
que[i].u=uu;
que[i].v=vv;
que[i].w=ww;
}
sort(que,que+m,cmp);
int x,zz,dd;
for(int i=1;i<=k;i++){
scanf("%d%d",&x,&zz);
for(int j=1;j<x;j++){
scanf("%d",&dd);
int c1=find(zz),c2=find(dd);
if(c1!=c2)
father[c2]=c1;
}
}
edge=0;
for(int i=1;i<=n;i++){
if(father[i]==i)
edge++;
}//此时只需要判断还有几个相等,其中另一个含义就是看这些个点分成了几堆,不妨设为k堆,那么只需要k-1条线便可以将其他的点连接在一起,即其他的堆
sum=0;
bool flag=false;
for(int i=0;i<m;i++){
int a1=find(que[i].u);
int a2=find(que[i].v);
if(a1!=a2){
father[a1]=a2;
sum+=que[i].w;
edge--;
}
if(edge==1){
flag=true;
break;
}
} if(flag)
printf("%d\n",sum);
else
printf("-1\n");
}
return 0;
}

HDU 3371 kruscal/prim求最小生成树 Connect the Cities 大坑大坑的更多相关文章

  1. hdu 3371(prim算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3371 Connect the Cities Time Limit: 2000/1000 MS (Jav ...

  2. hdu 3371(启发式合并的最小生成树)

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

  3. POJ 1258 Agri-Net(Prim求最小生成树)

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64912   Accepted: 26854 Descri ...

  4. Codeforces 632F - Magic Matrix(暴力 bitset or Prim 求最小生成树+最小瓶颈路)

    题面传送门 开始挖老祖宗(ycx)留下来的东西.jpg 本来想水一道紫题作为 AC 的第 500 道紫题的,结果发现点开了道神题. 首先先讲一个我想出来的暴力做法.条件一和条件二直接扫一遍判断掉.先将 ...

  5. prim求最小生成树

    一直以来只会Kruskal prim和dijkstra很像 只不过prim维护的是最短的边,而dijkstra维护的是最短的从起点到一个点的路径 同时prim要注意当前拓展的边是没有拓展过的 可以用堆 ...

  6. Kruscal算法求图的最小生成树

    Kruscal算法求图的最小生成树 概述   和Prim算法求图的最小生成树一样,Kruscal算法求最小生成树也用到了贪心的思想,只不过前者是贪心地选择点,后者是贪心地选择边.而且在算法的实现中,我 ...

  7. 新疆大学(新大)OJ xju 1009: 一带一路 prim求最短路径+O(n)素数筛选

    1009: 一带一路 时间限制: 1 Sec  内存限制: 128 MB 题目描述 一带一路是去去年习大大提出来的建设“新丝绸之路经济带”和“21世纪海上丝绸之路”的战略构想.其中就包括我们新疆乌鲁木 ...

  8. HDU 3371 Connect the Cities(prim算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3371 Problem Description In 2100, since the sea leve ...

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

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

随机推荐

  1. java网络编程基础

    前言 通过网络进行数据传输时,一般使用TCP/UDP进行数据传输.但是两个的区别就是TCP可靠,UDP不可靠.两个的共同之处就是都需要建立socket套接字,将IP地址和端口port进行绑定.但是服务 ...

  2. 标准I/O

    在程序运行时,会默认为我们打开三个流:标准输入流.标准输出流.标准出错流. 标准输入流一般对应我们的键盘 标准输出流一般对应显示器 标准出错流一般也对应显示器 1.标准输入流 在标准I/O中,java ...

  3. CsharpThinking---代码契约CodeContract(八)

    代码契约(Code Contract):它并不是语言本身的新功能,而是一些额外的工具,帮助人们控制代码边界. 代码契约之于C#,就相当于诗词歌赋之于语言. --- C# in Depth 一,概述 1 ...

  4. Java 读取文件到字符串

    Java的io操作比较复杂 package cn.outofmemory.util; import java.io.BufferedReader; import java.io.FileInputSt ...

  5. 每天一个linux命令(24):gzip命令

    减 少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进 行压缩和解压缩的命令,既方便又好用.gzip不仅可 ...

  6. tomcat服务器上webapps里的文件名和项目名称不一样,修改方法

    第一种方法:打开工程所在目录,找到一个 .mymetadata的文件,用记事本等打开,内容大致如下: <?xml version="1.0" encoding="U ...

  7. Java-transient

    transient的作用及使用方法 都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这 ...

  8. 【BZOJ-1984】月下“毛景树” 树链剖分

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1314  Solved: 416[Submit][Status][Discu ...

  9. 写在SDOI2016Round1前的To Do List

    理性的整理了一下自己的不足. 计算几何啥都不会,字符串类DP毫无练习,数据结构写的不熟,数论推不出式子,网络流建模常建残: 需要达成的任务: 一.网络流: 熟练网络流的板子(之前一直仰慕zkw费用流, ...

  10. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...