算法与数据结构实验题 7.2 寡人的难题

★实验任务

寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的道路,奈何国库空虚,寡人只能选择其中一些道路,把重点城市连接在一起,并且这些道路的花费要最少,   寡人决定让你来接受这个任务,替寡人分忧。

★数据输入

第一行有两个正整数 n,m,表示有 n 个城市(城市按照 1 到 n 编号),m 条道路可选择,接下来有 m 行,每行有三个正整数 u,v,c,分别表示这一条道路连通 u 和 v 且花费黄金 c 两。(1<=n<=50000,n-1<=m<=200000,0<=c<=10000)

★数据输出

输出能连通所有城市的道路的最小花费。

输入示例

输出示例

3

3

5

1

2

3

2

3

4

1

3

2


最基础的最小生成树模型。

Kraskal算法。


#include <cstdio>
#include <map>
#include <algorithm>
using namespace std;
int p[50010];
int s[200100],e[200100],w[200100],r[200100];
map <pair <int,int>,int > mp;
//写一个并查集
int Find(int x);
void Union(int root1,int root2);
//重载一个排序函数
bool cmp(const int i,const int j)
{return w[i]<w[j];
}
void Kruskal(int n,int m)
{for (int i=1;i<=n;i++)p[i]=-1;for (int i=1;i<=m;i++)r[i]=i;sort(r+1,r+m+1,cmp);long long ans=0;for (int i=1;i<=m;i++){int x=r[i];int u=Find(s[x]),v=Find(e[x]);//检查这两点是否连通 if (u!=v){ans+=w[x];Union(u,v);}   }printf ("%lld\n",ans);
}
int main()
{int n,m,counter=1,u,v,c;scanf ("%d%d",&n,&m);pair <int,int> p;for (int i=0;i<m;i++){scanf ("%d%d%d",&u,&v,&c);p.first=u;p.second=v;if (mp[p]==0)//检查这两点有没有出现过 {mp[p]=counter;p.first=v;p.second=u;mp[p]=counter;w[counter]=c;s[counter]=u;e[counter]=v;counter++;}if (c<w[mp[p]])//去重边,修改路径长度 w[mp[p]]=c;} Kruskal (n,counter);return 0;
}
int Find(int x)
{if (p[x]<=0)return x;elsereturn p[x]=Find(p[x]);
}
void Union(int root1,int root2)
{root1=Find(root1);root2=Find(root2);if(root1==root2)return ;if (p[root1]<p[root2]){p[root2]=root1;} else{if (p[root1]==p[root2])p[root2]--;p[root1]=root2;}
}

寡人的难题 (数据结构作业)相关推荐

  1. 算法与数据结构实验题 10.23 寡人的难题

    算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...

  2. 数据结构作业之输出树的每一条从根节点到叶节点的路径

    数据结构作业,输出树的每一条从根节点到叶节点的路径 #include <stdio.h> #include <stdlib.h> typedef struct tree {ch ...

  3. 数据结构作业9(清览题库)

    数据结构作业9(清览题库) 主要涉及内容为:拓扑排序,关键路径,内排序等

  4. 算法与数据结构实验题 10.23 寡人的难题——Kurskal算法

    ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的道路,奈何国库空虚,寡人只能选择其中一些道路, ...

  5. 【数据结构作业—01】用单循环链表解决约瑟夫问题

    实验作业一:线性表(链表) 1. 用单循环链表解决约瑟夫问题. 问题描述: 一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务.旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上 ...

  6. 数据结构作业(校园导航系统)

    本人是一名暨南大学大二的学生,这是我的数据结构课程的一次编程作业,主要算法是弗洛伊德算法,希望各位大神多多指教. #include<stdio.h> #include<stdlib. ...

  7. 数据结构作业1 讲解和拓展

    原题来自雪梨教育 http://www.edu2act.net/task/list/checked/ 题后给出讲解和扩展 任务1_1 比较下列算法的时间复杂度 任务描述: 下面给出4个算法,请分析下列 ...

  8. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

  9. HIT-哈工大数据结构-作业5(C++)

    文件说明 文件名 数据生成.cpp test.cpp BST.h BST.cpp 文件内容 用于生成测试数据的程序 折半查找和测试主程序 BST类声明 BST类实现 1.设计 BST 的左右链存储结构 ...

  10. HIT-哈工大数据结构-作业1(C++)

    一.你能结合自己的编程实践,谈一下数据结构和算法之间的关系吗? **数据结构:**指的是数据元素之间的抽象的相互关系,并不涉及数据元素的具体内容.这种结构关系将数据组织成为某种形式的信息表,以便程序进 ...

最新文章

  1. mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句
  2. webservice restful一个小例子
  3. require用法php,php中的require到底是函数还是语法
  4. python画椭圆turtle_Python turtle画图库画姓名实例
  5. Error dialog box generic entry point
  6. 保险的现金价值是什么意思?
  7. 一些C#实用的方法汇总
  8. 学习Java适合参加哪些工作?Java需要掌握的技术
  9. pdf转HTML出现乱码,PDF转Word出现乱码解决方法
  10. Python社区发现—Louvain—networkx和community
  11. 推动数据开放共享,释放数字经济创新活力
  12. 常用youtube快捷键,让看视频学技术起飞
  13. 都说web前端开发薪资高,入行就有上万月薪,转行难吗?
  14. dalao的背包九讲
  15. C语言系列(11)——数组(02)
  16. C#卸载程序需要密码/防卸载功能
  17. 用户手机微信扫一扫就能进入公众号
  18. 金蝶二次开发 的新手体会
  19. [转] On the contrary, in contrast, on the other hand用法区别
  20. Linux系统简介(简单粗暴)

热门文章

  1. 魅族mx4 android5.0,第一手更新 魅族MX4Pro安卓5.0抢先体验
  2. 太阳能热水器系统设计
  3. 带权图 Weighted Graph
  4. Android获取u盘容量的方法,android经过usb读取U盘的方法
  5. 实用技巧----百度绘制函数图像
  6. torch.cuda
  7. PIPIOJ 1169: PIPI倒水
  8. 你好2010,再见2009
  9. 干货:中国移动互联网行业深度报告
  10. [ZROI1788]计算器