题意:

首先给你一个图,需要你求出最小生成树,首先输入n个节点,用大写字母表示各节点,接着说有几个点和它相连,然后给出节点与节点之间的权值。
拿第二个样例举例:比如有3个节点,然后接下来有3-1行表示了边的情况,拿第一行来说:
A 2 B 10 C 40
表示A有2个邻点,B和C,AB权值是10,AC权值是40。

思路:

直接套prime算法模板和kuskal算法模板,然后处理下数据就可以了。

代码:

prime:

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f;
int road[maxn][maxn],dis[maxn];
bool vis[maxn];
int n; void prim()
{
int minn, v;
for(int i = ; i < n; i++)
{
dis[i] = road[][i];
vis[i] = false;
}
for(int i = ; i <= n; i++)//包括第一个点在内,一共要纳入n个点
{
minn = inf;
for(int j = ; j < n; j++)//每次找出未纳入顶点集与已知顶点集构成的权值最小的一条边
{
if(!vis[j] && minn > dis[j])
{
v = j;
minn = dis[j];
}
}
vis[v] = true;//把该顶点纳入已知集合
for(int j = ; j < n; j++)//更新与未纳入集合中的顶点的边的最小权值
{
if(!vis[j] && dis[j] > road[v][j])
dis[j] = road[v][j];
}
}
for(int i = ; i < n; i++)
dis[] += dis[i];
cout << dis[] << endl;
} int main()
{
int m,w;
char a[],b[];
while(cin>>n,n)
{
memset(road,,sizeof(road));
for(int i=;i<n;i++)
road[i][i]=;
for(int i=;i<n;i++)
{
scanf("%s%d",a,&m);
for(int j=;j<m;j++)
{
scanf("%s%d",b,&w);
road[a[]-'A'][b[]-'A']=road[b[]-'A'][a[]-'A']=w;
}
}
prim();
}
return ;
}

kruskal:

#include<iostream>
#include<algorithm>
using namespace std;
int p[]; struct node
{
int villagea;
int villageb;
int distance;
}roads[]; bool cmp(node a, node b)
{
return a.distance < b.distance;
} int kruskal(int x)
{
return p[x] == x ? x : p[x] = kruskal(p[x]);
} int main()
{
int n, k, distance, number, ans;
char start_village, end_village;
while(cin >> n, n)
{
ans = k = ;
for(int i = ; i < ; i++)
p[i] = i;
for(int i = ; i < n- ; i++)
{
cin >> start_village >> number;
for(int j = ; j < number; j++, k++)
{
cin >> end_village >> distance;
roads[k].villagea = start_village - 'A';
roads[k].villageb = end_village - 'A';
roads[k].distance = distance;
}
}
sort(roads, roads + k, cmp);
for(int i = ; i < k; i++)
{
int x = kruskal(roads[i].villagea);
int y = kruskal(roads[i].villageb);
if(x != y)
{
ans = ans + roads[i].distance;
p[y] = x;
}
}
cout << ans << endl;
}
return ;
}

POJ1251 Jungle Roads【最小生成树】的更多相关文章

  1. POJ1251 Jungle Roads 【最小生成树Prim】

    Jungle Roads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19536   Accepted: 8970 Des ...

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

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

  3. HDU1301&&POJ1251 Jungle Roads 2017-04-12 23:27 40人阅读 评论(0) 收藏

    Jungle Roads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25993   Accepted: 12181 De ...

  4. POJ1251 Jungle Roads(Kruskal)(并查集)

    Jungle Roads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23882   Accepted: 11193 De ...

  5. POJ1251 Jungle Roads Kruskal+scanf输入小技巧

    Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...

  6. POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解

    题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...

  7. hdu 1301 Jungle Roads 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...

  8. hdu Jungle Roads(最小生成树)

    Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of for ...

  9. hdu1301 Jungle Roads 最小生成树

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

随机推荐

  1. Lodop代码设置打印机等信息后 设置预览可重选

    Lodop打印控件默认在代码里指定了打印.纸张.纸张方向.份数等信息,在预览的界面的设置里是无法重新选择的,默认是禁止重选的,如果重选会提示,例如:“打印方向”已由程序控制,无法改变!“纸张大小”已由 ...

  2. 我的Linux系统九阴真经

    在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了.各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公司,越来越多.有一些公 ...

  3. git 在局域网新建远程库及本地开发常用命令

    git  版本直接在官网下载即可:https://git-scm.com/downloads 安装后有git bash与git gui可以用. 1.在远程服务器上新建裸仓库 git init --ba ...

  4. Luogu4221 WC2018州区划分(状压dp+FWT)

    合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通.显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了. 考虑状压dp.设f[S]为S集合所有划分方 ...

  5. 类加载过程&对象的创建过程

    类加载过程 1.JVM发现要使用一个类,首先要到方法区中找:如果找到了,就直接使用,如果没有找到,才会去找这个类的class文件,然后加载: (在找class文件时,是根据classpath配置的地址 ...

  6. John's trip POJ - 1041(这题数据有点水)

    题意: 其实还是一个欧拉回路,但要按字典序走路: 解析: 我真是蠢啊emm... map[i][j]表示由顶点i经街道j会到达的顶点编号 然后枚举j就好了 用栈储存.. 虽然我不是这样写的 #incl ...

  7. length、length()、size()区别 List与String相互转换

      字符串 数组 List对象 定义 String str = ""; String[] s = new String[5]; char[] s; List<String&g ...

  8. python操作oracle实战

    import cx_Oracle conn = cx_Oracle.connect('ua_test/ua_test@192.32.98.15/oracledb') cur1 = conn.curso ...

  9. luogu1966 火柴排队(离散化+树状数组)

    由于是一个二次函数的关系,所以易证应该尽量让两组的顺序相同 然后就离散化乱搞几发,最后就变成了求逆序对的数量了 #include<bits/stdc++.h> #define pa pai ...

  10. node.js安装后出现环境变量错误找不到node

    安装node.js和bower之后,运行bower出现/usr/bin/env: 'node': No such file or directory错误 这个错误是由于安装完node.js环境变量并没 ...