模板题 Kruskal直接过 调试时候居然在sort(edge + 1, edge + 1 + m)上浪费好多时间...

不过本着ACMer的心态自然要测试一下两种方法分别的速度

Kruskal : Memory 392 Time 16

Prim: Memory 576 Time 16

...........哦居然一样啊

Prim

#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#define INF 0x3F3F3F3F
using namespace std; typedef pair<int, int> pii;
struct cmp{
bool operator() (const pii a, const pii b){
return a.first > b.first;
}
}; int size, head[], point[], nxt[], val[];
int n, dist[]; void init()
{
size = ;
memset(head, - ,sizeof head);
} void add(int from, int to, int value)
{
val[size] = value;
point[size] = to;
nxt[size] = head[from];
head[from] = size++;
} int prim(int s)
{
int ans = ;
bool vis[];
memset(dist, 0x3f, sizeof dist);
memset(vis, false, sizeof vis); priority_queue<pii, vector<pii>, cmp> q;
for(int i = head[s]; ~i; i = nxt[i]){
dist[point[i]] = val[i];
q.push(make_pair(val[i], point[i]));
}
dist[s] = ;
vis[s] = true;
while(!q.empty()){
pii u = q.top();
q.pop();
if(vis[u.second]) continue;
vis[u.second] = true;
ans += u.first;
for(int i = head[u.second]; ~i; i = nxt[i]){
int j = point[i];
//printf("check edge[%d][%d] vis = %d value = %d\n", u.second, j, vis[j], val[i]);
if(!vis[j] && dist[j] > val[i]){
//printf("add edge[%d][%d]\n", u.second, j);
dist[j] = val[i];
q.push(make_pair(dist[j], j));
}
}
}
return ans;
} int main()
{
while(scanf("%d", &n), n){
init();
for(int i = ; i < n; i++){
int k;
scanf("%*s%d", &k);
while(k--){
char to[];
int value;
scanf("%s%d", to, &value);
add(i, to[]-'A'+, value);
add(to[]-'A'+, i, value);
}
}
printf("%d\n", prim());
}
return ;
}

Kruskal

#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#define INF 0x3F3F3F3F
using namespace std; int n, m;
int parent[], rank[];
struct Edge{int u, v, w;}edge[]; bool cmp(Edge a, Edge b)
{
return a.w < b.w;
} inline int FindSet(int x)
{
while(x != parent[x]) x = parent[x];
return x;
} void UnionSet(int l, int r)
{
int x = FindSet(l);
int y = FindSet(r);
if(rank[x] > rank[y]){
rank[x] += rank[y];
parent[y] = x;
}
else{
rank[y] += rank[x];
parent[x] = y;
}
} int kruskal()
{
for(int i = ; i <= n; i++){
parent[i] = i;
rank[i] = ;
}
int ans = ;
sort(edge+, edge+m+, cmp);
for(int i = , num = ; num < n- && i <= m; i++){
int x = FindSet(edge[i].u);
int y = FindSet(edge[i].v);
if(x != y){
num++;
UnionSet(x, y);
ans += edge[i].w;
}
}
return ans;
} int main()
{
while(scanf("%d", &n), n){
m = ;
for(int i = ; i < n; i++){
int k;
scanf("%*s%d", &k);
while(k--){
m++;
edge[m].u = i;
char v[];
scanf("%s%d", v, &edge[m].w);
edge[m].v = v[] - 'A' + ;
//printf("Edge %d : u = %d v = %d w = %d\n", m, edge[m].u, edge[m].v, edge[m].w);
}
}
printf("%d\n", kruskal());
}
return ;
}

kuangbin_MST A (POJ 1251)的更多相关文章

  1. poj 1251 Jungle Roads (最小生成树)

    poj   1251  Jungle Roads  (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...

  2. POJ 1251 Jungle Roads (prim)

    D - Jungle Roads Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Su ...

  3. poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题

    poj 1251  && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...

  4. Poj(1251),Prim字符的最小生成树

    题目链接:http://poj.org/problem?id=1251 字符用%s好了,方便一点. #include <stdio.h> #include <string.h> ...

  5. OpenJudge/Poj 1251 丛林中的路/Jungle Roads

    1.链接地址: http://bailian.openjudge.cn/practice/1251/ http://poj.org/problem?id=1251 2.题目: 总时间限制: 1000m ...

  6. (最小生成树) Jungle Roads -- POJ -- 1251

    链接: http://poj.org/problem?id=1251 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2177 ...

  7. POJ 1251 Jungle Roads (zoj 1406) MST

    传送门: http://poj.org/problem?id=1251 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406 P ...

  8. POJ 1251 Jungle Roads - C语言 - Kruskal算法

    Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid ...

  9. poj 1251 统计难题(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 AC代码: #include<iostream> #include<algor ...

随机推荐

  1. Chrome 应用推荐 - 下载管理扩展: Chrono

    地址:http://goo.gl/JVdxvg Chrono下载管理器让你轻松高效地管理Chrome浏览器中的下载任务.Chrono与Chrome浏览器紧密地整合在一起,如菜单.工具栏支持等等.Chr ...

  2. goldengate 12c对teradata的支持

    OGG12c在2014.4.24发布了对TD的最新支持版本,软件可在此下载:https://edelivery.oracle.com.新版本特性如下: 当前支持TD 14.1的捕获和交付,仍然基于Te ...

  3. 添加Sql作业,新建步骤出现:从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败,原因是出现以下错误:c001f011。的解决方法

    32位操作系统: 打开运行(命令提示符), 一.输入 cd c:\windows\system32 进入到c:\windows\system32路径中 二.输入 regsvr32 "C:\P ...

  4. 转:Java面试题集(1-50)

    Java程序员面试题集(1-50) http://blog.csdn.net/jackfrued/article/details/17403101 一.Java基础部分 1.面向对象的特征有哪些方面? ...

  5. 检测INT3 软断点

    “INT3”断点指令的机器码是 “0xcch” 检测思路,取函数地址,判断第一个字节是不是 “CCh” BYTE bFirst = ; ProcAddres = GetProcAddress(Load ...

  6. Ubuntu 14.10 下安装SVN

    本文主要介绍SVN独立服务器的的安装和简单配置:1.安装 # sudo apt-get install subversion 测试安装是否成功: # svnserve --version 回车显示版本 ...

  7. 基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

    本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: < ...

  8. 一个简单的Dump转文本工具—Dump2Text

    每次电脑重装都得烦心,要把庞大的IDE重新配置一次,正准备安装Visual Stdio 2010,上网找镜像的时候发现,Visual Stdio 2013推出了Community版,不仅没有lite掉 ...

  9. UILabel自适应宽度的函数详解

    之前用Text Kit写Reader的时候,在分页时要计算一段文本的尺寸大小,之前使用了NSString类的sizeWithFont:constrainedToSize:lineBreakMode:方 ...

  10. IOS开发在线文档 记录下

    View Programming Guide for iOS https://developer.apple.com/library/prerelease/ios/documentation/UIKi ...