题意:

首先给你一个图,需要你求出最小生成树,首先输入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. gitlab搭建与配置说明

    1. 概述 Gitlab分为社区版和企业版,此次安装的是社区版(gitlab-ce). 2. 准备 本次使用系统为Ubuntu16.04. 3. 安装 添加GitLab仓库,并安装到服务器上(将git ...

  2. scrapy 简单爬虫实验

    利用python的模块requests来爬取百度搜索出来的url 使用环境为python3 #!/use/bin/env python # -*- coding:utf-8 -*- import re ...

  3. BZOJ1087[SCOI2005]互不侵犯——状压DP

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入 只有一行,包含两个数N,K ( ...

  4. 覆盖的面积 HDU - 1255(扫描线求面积交)

    题意: 就是扫描线求面积交 解析: 参考求面积并.... 就是把down的判断条件改了一下..由w > 0 改为 w > 1 同时要讨论一下 == 1 时  的情况, 所以就要用到一个临时 ...

  5. Aladdin and the Flying Carpet LightOJ - 1341 (素数打表 + 算术基本定理)

    题意: 就是求a的因数中大于b的有几对 解析: 先把素数打表 运用算术基本定理 求出a的所有因数的个数 然后减去小于b的因数的个数 代码如下: #include <iostream> #i ...

  6. Codeforces Round #420 (Div. 2) A,B,C

    A. Okabe and Future Gadget Laboratory time limit per test 2 seconds memory limit per test 256 megaby ...

  7. 【题解】 bzoj3036: 绿豆蛙的归宿 (期望dp)

    题面戳我 Solution 反向建图跑拓扑排序,顺便处理\(dp\) 假设某条边是\(u \rightarrow v (dis)\) ,那么转移方程就是\(dp[v]+=(dp[u]+dis)/in[ ...

  8. React Native——组件的生命周期

    组件生命周期 上流程图描述了组件从创建.运行到销毁的整个过程,可以看到如果一个组件在被创建,从开始一直到运行会依次调用getDefaultProps到render这五个函数:在运行过程中,如果有属性和 ...

  9. 洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告

    P4100 [HEOI2013]钙铁锌硒维生素 题目描述 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加 宇宙比赛的饮食. 众所周知,前往宇宙的某个星球,通常要花费好长好长的时间, ...

  10. Python数据类型(列表和元组)

    1.3 List(列表) 列表由一系列按特定顺序排列的元素组成. 在Python中,用方括号[ ]来表示列表,并用逗号来分隔其中的元素. 1.3.1 访问列表元素 在Python中,第一个列表元素的索 ...