DS实验题 Old_Driver UnionFindSet结构】的更多相关文章

题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // Created by wasdns on 16/12/18. // Copyright © 2016年 wasdns. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring…
题目 思路 很典型的并查集问题,朋友A和B要合并到一个统一的集合中,也就是Union(A, B)操作,在Union操作中需要先找到A所属的集合的代表元和B所属集合的代表元,也就是使用Find(A)和Find(B),如果它们的代表元不一样,则将B集合合并到A集合(pre[B_root] = A_root). 在Find的过程中,使用了路径压缩算法,使用i记录当前节点,使用j记录当前i的上级: 1.用j记录i的上级 2.将i的上级改为i_root 3.i=j 本题中,另外一种关系,也就是敌人,可以用…
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert)和删除最小(DeleteMin)这两种操作的数据结构.对应于队列的操作,Insert相当于Enqueue,DeleteMin相当于Dequeue. 链表,二叉查找树,都可以提供插入(Insert)和删除最小(DeleteMin)这两种操作,但是为什么不用它们而引入了新的数据结构的.原因在于应用前两者…
参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路径优先路由算法(OSPF). 题目: 第一种实现的算法(错误): 在看过相关的Dijkstra算法解析之后,决定自己尝试写个算法,不过很遗憾,考虑并不全面,理解也不是特别深刻. 最后决定还是贴出来. 算法思想: 1.建立邻接表(后面用二维数组实现,相对来说轻松很多) 2.维护三个数组:dist代表从…
算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小 风姑娘不想走那么长的山路,所以打算乘坐专用的交通工具.有的景点之间有路, 乘坐交通工具需要花费一定的金额. 由于到达景区之前已经花了一部分钱了,现在可爱的小风姑娘站在景点 1, 即根景点.按原计划她要去编号为 m 的景点,导游告诉她到景点 m 总共要花的钱 (包括来之前花的钱).然而善变的小风…
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从1到n,其中1为根节点. 第2行有n个数字,第i个数字表示i的父亲节点.(1的父亲节点为0,表示无)第3行为中序遍历.30%的数据:n<=20:60%的数据:n<=1000:100%的数据:n<=10000: ★ 数据输出 输出2行,第一行为先序遍历,第二行为后序遍历. 输入示例 10 0…
题目: 思路: 有两种做法,一种是Prim算法,另外一种则是我所使用的Kruskal算法,Kruskal的算法实现可以参考:最小生成树-Prim算法和Kruskal算法,讲的已经是十分清楚了. 具体算法实现: 1.首先用结构体数组存储输入的边,并且初始化一个并查集思想中的父亲数组fa[i]: 2.用sort根据边权进行排序,边权小的边在前,大的在后: 3.从1到m遍历已经排好序的边 (1)遍历到边i,其两个节点分别是a和b,查找两个节点的祖先A和B (2)如果A == B,加入边i会形成环路,则…
题目: 提示:并没有精度问题. 原题 NOIP2010 导弹拦截 思路 设源点为A(x1, y1)和B(x2, y2). 第一步,用结构体存节点,包括以下元素: 1.横坐标x 2.纵坐标y 3.节点和A的距离平方len1:len1 = (x-x1) * (x-x1) + (y-y1) * (y-y1) 4.节点和B的距离平方len2:len2 = (x-x2) * (x-x2) + (y-y2) * (y-y2) 其中3和4在输入的时候计算. 第二步,假设所有的点都在源点A的圆圈范围:根据与A点…
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿子. 用for遍历一遍所有的节点,让每一个节点都连接到它的父亲,最后从根节点开始访问即可. 代码: // // main.cpp // Tree // // Created by wasdns on 16/12/19. // Copyright ? 2016年 wasdns. All rights…
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange // // Created by wasdns on 16/10/7. // Copyright ? 2016年 wasdns. All rights reserved. // #include <iostream> #include <string> #include <cst…
题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wasdns. All rights reserved. // #include <iostream> #include <cstdio> #include <cstdlib> #include <string.h> #include <string>…
★实验任务 fd是一个公认的美丽校园.一天,fd来了一群地鼠,编号为1到n,他们希望在这里定居.现在先由第一只地鼠往下打一个单位的距离,并且在那里安家.对于每一个已经安家的地鼠,如果他左下或右下没有邻居,那还没安家的地鼠就可以在他的左下或者右下安家.地鼠们已经建完所有的窝了,他们评价这些窝合格的标准是它们能不能形成一棵二叉搜索树(二叉搜索树的定义见课本).现在需要你帮助他们评估一下他们的窝挖的是否合格. ★数据输入 第1行一个整数n,表示地鼠总共n只.接下来一共n行,每一行三个数:l,o,r,其…
题目 思路 很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录. 但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复杂度是O(n^3)的量级,结果是TLE. 第二种方法是利用STL中的priority_queue模板进行解题,很方便,这里给出AC代码.但是优先队列手写实现还是需要实践,将在下一篇进行实现. 代码 Huffman: // // main.cpp // Huffman Tree2 // // Crea…
题目: 思路: 如果直接暴力搜索的话,时间复杂度为O(n*m),在n为百万量级的情况下,必然是T. 所以,这里通过hash函数,将字符串转换为对应的hash值:同时利用邻接表避免了hash冲突,方法是用head[hashval]存储指向一个相同hash值的单链表的指针(这里指的是相当于一个头指针),如果一个字符串得到的hash值在之前出现过,则加入单链表:最后在查找的时候,只需要找字符串对应hash值的单链表即可. 注意:(1)在建立邻接表的时候,新插入的节点不断加入到链表的首部,这样在查询的时…
题目: 提示: Floyd最短路径算法实现(未测试): // // main.cpp // Alg_Floyd_playgame // // Created by wasdns on 16/11/19. // Copyright ? 2016年 wasdns. All rights reserved. // #include <iostream> #include <cstdio> #include <cstdlib> #include <string> #…
题目: 代码: // // main.cpp // word // // Created by wasdns on 16/11/11. // Copyright © 2016年 wasdns. All rights reserved. // #include <iostream> #include <string> #include <string.h> #include <cstdio> #include <stack> #include &l…
题目: 算法设计: 计算最小值算法: 设置一个flag,flag为1的时候代表遇到*号: 遇到数字时: flag为0进栈: flag为1的时候,从栈顶提出一个元素和当前元素运算,结果进栈 最后对栈进行加法运算,得到结果,mod. 计算最大值算法: 设置一个flag,flag为1的时候代表遇到+号: 设置一个累加器pt: 遇到数字时 1.flag为0进栈: 2.flag为1的时候,需要对之前flag的状态进行判断: flag_pre若为1,更新累加器: flag_pre若为0,从栈顶压出一个元素,…
数据结构与算法实验题 6.1 s_sin's bonus ★实验任务 正如你所知道的 s_sin 是一个非常贪玩的人 QAQ(如果你非常讨厌他请直接从第二段开 始看),并且令人感到非常遗憾的是,他是一只非常非常穷的 ds,为了改变自己的经济情况 他决定外出打工,但是因为 s_sin 是一只死宅,力量魔法耐力速度运气五围都差到爆表 QAQ. 正当他对人生无比绝望的时候,一个游戏店的老板找到他请他帮助设计一个游戏,并答应给 他一定的报酬.游戏的内容如下: 玩家从 n 个点 n-1 条边的图,从节点…
数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输入的第 1 行是一个正整数 n 和 m(1<= n <=6 ,  n<=m<= C(3*n,3) 组合数) ,输入的第2~m+1行每行包括四个正整数a,b,c,s(1<=a , b ,c <=3 *n, a,b,c不相等,1<=s<=10 ^8)表示组合(a,b…
数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能能对其中某个魁偶战斗值进行提高,增加的值为 排在该魁偶左边的战斗值大于它且离他最近的魁偶的战斗值(若该魁偶左边没有大于它的则 战斗值不变).若有一排魁偶战斗值为 8 7 6 8 9 2 则对最后一个魁偶是用该技能的话则最 后一个魁偶战斗值变成 2+9=11.现在召唤师召唤了一排魁偶,从左到右战斗值都…
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第一题一模一样,输出输入改下就好 水的半死. 另外一题我以为是一定要一遍读入一边输出,被骗了,最后一起输出就好.等星期一再发那题的题解. #include<cstdio> #include<cstring> int cur; struct node { char c; node *lef…
21天学通Python课后实验题4.6 1. 编程实现用户输入一门课程的两门子课程成绩,第一门子课程60分以上,则显示“通过”,第一门子课程不及格,则显示“未通过”,第一门子课程及格,而第二门子课程不及格,则显示“补考”. kecheng1 = int(input("请输入课程1的成绩:")) if kecheng1 > 60: print("课程1通过") kecheng2 = int(input('请输入课程2的成绩:')) if kecheng2 <…
实验七 MySQL语言结构 一.  实验内容: 1. 常量的使用 2. 变量的使用 3. 运算符的使用 4. 系统函数的使用 二.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary(员工薪水情况表). 三.  实验步骤:(要求用命令完成以下操作) 1. 常量的使用 (1)   计算85和32的和.差.积.商.余数: (2)   显示“I love Mys…
玩家从n 个点n-1 条边的图,从节点1 丢下一个小球,小球将由于重力作用向下落,而从小球所在点延伸出的每一条边有一个值pi 为小球通过该条边的概率(注意从同一个节点向下延伸的所有边的pi 的和可以小于1,也可以大于1,并且保证对于单独的一条边不会出现pi>1 的情况),而对于所有处于最下方的节点(如图红点所示)都可以有一个值vi,代表玩家可以获得的奖励.现在老板给你这样一张图,之后给你n 个vi 的值,老板希望玩家可以获得的奖励的期望值最小.(对题目不理解可以参见样例)Ps:小球不会逆着重力往…
热身题 服务器正在运转着,也不知道这个技术可不可用,万一服务器被弄崩了,那损失可不小. 所以, 决定在虚拟机上试验一下,不小心弄坏了也没关系.需要在的电脑上装上虚拟机和linux系统 安装虚拟机(可参考Vmware.Virtual Box等) 安装ubuntu系统(推荐安装16.04版本) 写一个helloworld程序,在ubuntu系统上编译运行 (你可能需要了解linux系统的终端和一些基本命令.文本编辑工具nano.如何编译代码.运行程序) 1.安装虚拟机Vmware:在官网下载页面选择…
★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节点,节点上都标注了 Bibi 心中该地点的小偷数量.现在 Bibi 告诉你一个 节点 k,请你求出以该节点为根的子树中小偷数量的总和,以及子树中小偷最多 的节点的小偷数量. ★数据输入 输入第一行为一个正整数 n(1≤n≤100000)表示树的节点数目,树根的编号 总是为 1,且没有小偷. 接下来…
★实验任务 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索 自己的手机. 现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点 都有一个权值 x,代表他心中预感向这个节点走可能找回自己手机的程度(虽然 他的预感根本不准).当 Bibi 到达一个节点时,如果该节点有未搜索过的儿子节 点,则 Bibi 会走向未搜索过的儿子节点进行搜索,否则就返回父亲节点.如果 某节点拥有两个未搜索过的儿子节点,Bibi 会选择先搜索权值大的儿子节点. 假设 Bi…
★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒的旧怪消失.小 F 决定发动一次技能,他的技能最多 维持 k 秒,他希望获得最大的成就值,请你帮他计算他发动技能的时间 l 和技能 结束时间 r(r-l+1<=k).当存在多种方案使得成就值最大时,选择技能发动时间 l 最小的方案,再选择技能持续时间 r-l+1 最小的方案. ★数据输入 输入第一行…
//程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数. //重难点:结构体的定义.结构体的使用.文件指针的定义.对文件的操作.输出格式‘%4d’.两种方法获取最小值. #include <stdio.h> #define N 16 typedef struct//定义一个新结构体类型 { ]; int s; } STREC;//新…
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年9月26日 必修/选修: 必修 实验内容 (1)链表练习,要求实现下列功能:通过键盘输入一些整数,建立一个链表,这些数是你学号中依次取出的两位数, 再加上今天的时间.打印所有链表元素, 并输出元素的总数. (2)链表练习,要求实现下列功能:实现节点插入.删除.输出操作,继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,…