寡人的难题 (数据结构作业)
算法与数据结构实验题 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;}
}
寡人的难题 (数据结构作业)相关推荐
- 算法与数据结构实验题 10.23 寡人的难题
算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...
- 数据结构作业之输出树的每一条从根节点到叶节点的路径
数据结构作业,输出树的每一条从根节点到叶节点的路径 #include <stdio.h> #include <stdlib.h> typedef struct tree {ch ...
- 数据结构作业9(清览题库)
数据结构作业9(清览题库) 主要涉及内容为:拓扑排序,关键路径,内排序等
- 算法与数据结构实验题 10.23 寡人的难题——Kurskal算法
★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的道路,奈何国库空虚,寡人只能选择其中一些道路, ...
- 【数据结构作业—01】用单循环链表解决约瑟夫问题
实验作业一:线性表(链表) 1. 用单循环链表解决约瑟夫问题. 问题描述: 一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务.旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上 ...
- 数据结构作业(校园导航系统)
本人是一名暨南大学大二的学生,这是我的数据结构课程的一次编程作业,主要算法是弗洛伊德算法,希望各位大神多多指教. #include<stdio.h> #include<stdlib. ...
- 数据结构作业1 讲解和拓展
原题来自雪梨教育 http://www.edu2act.net/task/list/checked/ 题后给出讲解和扩展 任务1_1 比较下列算法的时间复杂度 任务描述: 下面给出4个算法,请分析下列 ...
- 二叉树的先中后序递归和非递归遍历(数据结构作业)
一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...
- HIT-哈工大数据结构-作业5(C++)
文件说明 文件名 数据生成.cpp test.cpp BST.h BST.cpp 文件内容 用于生成测试数据的程序 折半查找和测试主程序 BST类声明 BST类实现 1.设计 BST 的左右链存储结构 ...
- HIT-哈工大数据结构-作业1(C++)
一.你能结合自己的编程实践,谈一下数据结构和算法之间的关系吗? **数据结构:**指的是数据元素之间的抽象的相互关系,并不涉及数据元素的具体内容.这种结构关系将数据组织成为某种形式的信息表,以便程序进 ...
最新文章
- mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句
- webservice restful一个小例子
- require用法php,php中的require到底是函数还是语法
- python画椭圆turtle_Python turtle画图库画姓名实例
- Error dialog box generic entry point
- 保险的现金价值是什么意思?
- 一些C#实用的方法汇总
- 学习Java适合参加哪些工作?Java需要掌握的技术
- pdf转HTML出现乱码,PDF转Word出现乱码解决方法
- Python社区发现—Louvain—networkx和community
- 推动数据开放共享,释放数字经济创新活力
- 常用youtube快捷键,让看视频学技术起飞
- 都说web前端开发薪资高,入行就有上万月薪,转行难吗?
- dalao的背包九讲
- C语言系列(11)——数组(02)
- C#卸载程序需要密码/防卸载功能
- 用户手机微信扫一扫就能进入公众号
- 金蝶二次开发 的新手体会
- [转] On the contrary, in contrast, on the other hand用法区别
- Linux系统简介(简单粗暴)