首页 > 编程语言 >[JLU] 数据结构与算法上机题解思路分享-第三次上机

[JLU] 数据结构与算法上机题解思路分享-第三次上机

时间:2024-07-02 23:31:01浏览次数:25  
标签:JLU 输出 上机 题解 样例 表示 编号 顶点 输入

前言

首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。

这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record

希望你能在这里找到你想要的:)

正文

A 图的创建

分数 10
作者 朱允刚
单位 吉林大学
请编写程序创建一个有向图。有向图中包含n个顶点,编号为0至n-1。

输入格式:
输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过20000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。

输出格式:
按顶点编号递增顺序输出每个顶点引出的边,每个顶点占一行,若某顶点没有引出边,则不输出。每行表示一个顶点引出的所有边,格式为a:(a,b,w)……,表示有向边a->b的权值为w,a引出的多条边按编号b的递增序排列。

输入样例:
7 7
0 1 5
0 3 7
0 6 6
1 2 4
2 5 1
3 5 3
6 5 4

输出样例:
0:(0,1,5)(0,3,7)(0,6,6)
1:(1,2,4)
2:(2,5,1)
3:(3,5,3)
6:(6,5,4)

代码长度限制
16 KB
时间限制
500 ms
内存限制
20 MB


该题只是图的创建,众所周知,图可以用邻接矩阵或邻接链表实现,这里采用了邻接链表,只要记录边和权值即可。


B 图的删边操作

分数 10
作者 朱允刚
单位 吉林大学
请编写程序对给定的有向图删除若干条边。有向图中包含n个顶点,编号为0至n-1。

输入格式:
输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。随后一行为一个整数k,表示删除的边的条数,接下来k行,每行为2个非负整数a、b,表示待删除的边为a->b。保证删除的边一定在原图中。

输出格式:
输出执行删边操作之后的图。每行表示一个顶点引出的所有边,格式为a:(a,b,w)……,表示有向边a->b的权值为w,a引出的多条边按编号b的递增序排列。若某顶点没有引出边,则不输出。

输入样例:
7 7
0 1 5
0 3 7
0 6 6
1 2 4
2 5 1
3 5 3
6 5 4
2
2 5
0 1

输出样例:
0:(0,3,7)(0,6,6)
1:(1,2,4)
3:(3,5,3)
6:(6,5,4)

代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB


图的创建同上图,这里的删边如果是邻接链表注意要删除时,确保不要一删就删了多个就行


C 图深度优先遍历

分数 10
作者 朱允刚
单位 吉林大学
编写程序对给定的有向图(不一定连通)进行深度优先遍历,图中包含n个顶点,编号为0至n-1。本题限定在深度优先遍历过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问,以顶点0为遍历起点。

输入格式:
输入第一行为两个整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过50。接下来e行表示每条边的信息,每行为两个整数a、b,表示该边的端点编号,但各边并非按端点编号顺序排列。

输出格式:
输出为一行整数,每个整数后一个空格,即该有向图的深度优先遍历结点序列。

输入样例1:
3 3
0 1
1 2
0 2
输出样例1:
0 1 2
输入样例2:
4 4
0 2
0 1
1 2
3 0
输出样例2:
0 1 2 3
代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


创建图后,进行DFS就行了,没啥讲的

要不简单讲下DFS或BFS好了,就是从一个点入手,搜寻该点所连的所有点并加入数组中,无论栈或队列,记录然后提出一点,继续搜寻,加入记录,往复至无点可寻。

嘛,突然想起,如果前这几道题都用邻接矩阵,或许实现就简单很多了


D 单源最短路径

分数 30
作者 朱允刚
单位 吉林大学
请编写程序求给定正权有向图的单源最短路径长度。图中包含n个顶点,编号为0至n-1,以顶点0作为源点。

输入格式:
输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。

输出格式:
输出为一行整数,为按顶点编号顺序排列的源点0到各顶点的最短路径长度(不含源点到源点),每个整数后一个空格。如源点到某顶点无最短路径,则不输出该条路径长度。

输入样例:
4 4
0 1 1
0 3 1
1 3 1
2 0 1
输出样例:
1 1
代码长度限制
16 KB
时间限制
100 ms
内存限制
20 MB


就是迪杰斯特拉算法的使用,没有什么可以引申的


E 双十一

分数 20
作者 朱允刚
单位 吉林大学
双十一期间,某著名电商平台“东东”为应对销售高峰,准备在n个城市中再增加一个自营仓库,其要求是该仓库设在n个城市中的某个城市,且距离其他所有城市的最短距离之和最小。请编写程序帮助“东东”找出设立仓库的地点。假定n个城市编号为0至n-1,它们之间至少有一个城市与其他所有城市可及。

输入格式:
输入包含多组数据。每组数据第一行为两个正整数n和e,均不超过100。n表示城市数。接下来e行表示两个城市间的距离信息,每行为3个非负整数a、b、c,其中a和b表示两个城市编号,c表示城市间的距离。

提示:可使用EOF判断输入结束。

输出格式:
输出为一个整数,表示建立仓库的城市编号,如多个城市满足要求,则输出编号最小者。

输入样例:
6 5
0 1 1
0 2 1
0 3 1
0 4 1
0 5 1
4 5
0 1 1
0 2 5
1 2 2
1 3 4
2 3 1

输出样例:
0
1

代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


该题的本质是找到一个到其它点距离之和最小的点,理所当然地应该使用Prim算法,求出各个点到其它所有点距离之和最短。


F 任务拓扑排序

分数 30
作者 朱允刚
单位 吉林大学
一个工程被分解成n个子任务,编号为0至n-1。要完成整个工程需要完成所有的子任务。其中一些子任务必须先于另外一些子任务被完成。给定各子任务之间的先后关系,请编写程序给出一个合理的任务完成顺序,若工程不可行,程序亦能识别。

输入格式:
输入第一行为两个整数n和e,均不超过100。n表示子任务数。接下来e行,表示已知的两个子任务间的先后关系,每行为两个整数a和b,表示任务a必须先于任务b完成。

输出格式:
若工程不可行(一些子任务以自己为先决条件),输出“unworkable project”;若工程可行,输出为1行整数,每个整数后一个空格,为n个子任务的编号,表示子任务的完成顺序,如果有多种可能的顺序,则输出字典序最小者。

注:字典序,即对象在字典中的顺序。对于两个数字序列,从第一个数字开始比较,当某一个位置的数字不同时,该位置数字较小的序列,字典序较小,例如1 2 3 9比1 2 4 5小,1 2 8 9比1 2 10 3小。

输入样例1:
3 2
0 1
1 2
输出样例1:
0 1 2
输入样例2:
3 3
0 1
1 2
2 0
输出样例2:
unworkable project
代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


拓扑排序,内容也是书上有的,简单说,就是从没有指着的点开始,把这个点弹出,并把点所连的点被连的标记数--,然后再从标记数0的点挑个点重复过程。

还有个字典序,无论字母、数字,是不是从前往后一个个比较,比如返回a < b,true则a字典序比b小。


G 关键路径

分数 30
作者 朱允刚
单位 吉林大学
假定一个工程由若干子任务构成,使用一个包含n个顶点、e条边的AOE网表示该工程,顶点编号为1至n,有向边表示该工程的每个子任务,边的权值表示完成该子任务所需的时间,假定网中只含一个源点和一个汇点。请编写程序求出该工程的所有关键活动,并计算完成该工程所需的最短时间。

输入格式:
每个测试点包含多组测试数据。每组数据第一行为2个整数n和e,均不超过200,分别表示AOE网的顶点数和边数。接下来e行表示每条边的信息,每行为3个正整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并不一定按端点编号顺序排列,且各顶点并不一定按拓扑序排列。

输出格式:
对每组数据,若工程不可行(AOE网中存在环),输出“unworkable project”;若工程可行,则输出第一行为完成工程所需的最短时间,并从第2行开始输出关键活动,每个关键活动占一行,格式为i->j,其中i和j表示关键活动所在边的端点编号。各关键活动输出顺序为:按i的递增顺序输出,若多个关键活动的i值相同,则按j的递增顺序输出。

输入样例:
4 4
1 2 6
1 3 4
2 4 1
3 4 1

输出样例:
7
1->2
2->4

代码长度限制
16 KB
时间限制
100 ms
内存限制
64 MB


简单的说,是计算最早完成时间与最晚完成时间相等的点,输出即可。

回头来看,这就是动态规划啊


H 联盟数目

分数 20
作者 朱允刚
单位 吉林大学
艾迪是一家集团公司的老板,该集团包含n家公司,为了管理公司,艾迪会时常通过网络向各公司发送消息。各公司间的网络是单向的,每个公司都有一个分发列表,表示其能向哪些公司直接传达消息。例如A公司的分发列表为B、C,表示A可将消息直接传送给B和C(由于网络是单向的,B或C不一定能向A传送消息),这样艾迪若想向A、B、C公司发送消息,则只需向A发送消息即可,随后A可将消息传送到B和C。

为了便于管理各公司,艾迪打算将n家公司分成若干组,每组称为一个区域联盟,每组满足如下条件:组内的任意公司消息互相可达。即对于组内任意公司u和v,u可将消息传送到v(可由u直接传送到v,也可通过组内其他公司中转传送到v),v也可将消息传送到u。可以认为一个公司可以将消息传送给自己,即一个公司可以自成一组。

艾迪希望组的数量尽可能少,即在满足上述条件的情况下,每组包含的公司数目尽可能多。

现给定每个公司的分发列表,请编写程序告知艾迪,他的集团最少能分成多少组。

输入格式:
第一行包含一个整数T (1≤T≤100)表示数据组数。对于每组数据,第一行为一个整数n (2≤n≤100),表示公司数目,公司编号为1到n。随后n行,第i行包含若干整数,表示第i个公司的分发列表,每行以0结尾。

输出格式:
对于每组数据,输出一行,为一个整数,表示组数。

输入样例:
3
5
2 4 3 0
4 5 0
0
0
1 0
3
2 0
0
2 1 0
3
2 0
3 0
0

输出样例:
3
3
3

代码长度限制
16 KB
时间限制
100 ms
内存限制
64 MB


这个点相对前面比较偏,实际上是要找到尽可能大的连通组,采用WarShall算法,找到各个组的最大闭包。


小结

本次上机简答考察了图的基本使用,创建、遍历、删除等,然后又加了点场景考察迪杰斯特拉算法和普利姆算法,最后搞了应该比较难反应过来的WarShall算法,算是把书上的内容过了一遍力,加油罢

标签:JLU,输出,上机,题解,样例,表示,编号,顶点,输入
From: https://www.cnblogs.com/luyaoqi/p/18279060

相关文章

  • AT_tdpc_number 数 题解
    题目传送门前置知识数位DP|记忆化搜索解法本题的提交在luogu上挂了,建议去原站或Vjudge上提交。基础数位DP,记录当前位置、已填的数码之和,接着记忆化搜索即可。需要注意的是\(0\bmodd=0\),如果写得不太好看(未处理前导零)的话需要减去其贡献。代码#include<bits/......
  • SP8177 JZPEXT - Beautiful numbers EXTREME 题解
    题目传送门前置知识数位DP|同余解法同余的传递性:若\(\begin{cases}a,b\in\mathbf{Z}\\p,q\in\mathbb{N}^{*}\\q|p\end{cases}\),则当\(a\equivb\pmod{p}\)时有\(a\equivb\pmod{q}\)。故在本题中\(\bmod\)各非零数码均等于\(0\)等价于\(\bmod\)各......
  • P5324 题解
    题意给定一个数列\(\{a_n\}\),定义一次删除操作为:假设当前序列长度为\(len\),删除序列中所有等于\(len\)的数。现在有\(m\)个操作,每次操作为单点修改或整体加减。每次操作完后,你需要修改若干个数,使得序列能够在若干次删除操作后被删空,求最小修改次数。数据范围:\(1\len,m......
  • 复旦大学2023--2024学年第二学期(23级)高等代数II期末考试第七大题解答
    七、(10分) 设$V$是$n$阶实矩阵全体构成的实线性空间, $A$是$n$阶正定实对称阵.对任意的$X,Y\inV$,定义二元函数$(X,Y)=\mathrm{tr}(XAY')$.(1)求证:$(-,-)$是$V$上的一个内积.(2)在上述内积下,$V$成为一个欧氏空间. 设$P,Q\inV$,$V$上的线性算子$......
  • abc360 E 题解
     E对于位置2~n,它们的概率是相等的。n*n个(x,y)对。其中x可以等于y。 对于x/y,y的逆元rev(y)为mul(y,mod-2)。加、减、乘、除都可以做。比如48/9和16/3的结果是一样的,48*rev(9)%mod=16*rev(3)%mod。比如3*rev(2)%mod=(rev(2)+rev(2)+rev(2))%mod. 对于每次操作,有多少......
  • 十四、Redis应用问题解决
    文章目录一、缓存穿透1.1问题描述1.2解决方案二、缓存击穿2.1问题描述2.2解决方案三、缓存雪崩3.1问题描述3.2解决方案四、分布式锁4.1问题描述4.2解决方案:使用redis实现分布式锁4.3编写代码4.4优化之设置锁的过期时间4.5优化之UUID防误删4.6优化之LUA脚......
  • P10676 『STA - R6』b20 题解
    题目传送门简单题,主要考察字符串。首先输入一个char类型的数组,然后输入粉丝的数量,最后直接输出数组的第一个以及粉丝的数量即可。温馨提示:提交此题时请务必将数组开大,否则你可能会获得\(90\)分高分。//『STA-R6』b20//codeby:cq_irritater//time:2024/06/30#in......
  • Oracle 上机
    --1.(3分)查找每个部门的最高工资员工编号及其下属信息。selecte2.empno,e1.*fromempe1join(select*fromempwhere(deptno,sal)in(selectdeptno,max(sal)fromempgroupbydeptno))e2one1.mgr=e2.empno;/*2.(5分)有成绩表如下(使用with子查询):准考证号科......
  • 【秋招突围】2024届秋招笔试-科大讯飞笔试题-03-三语言题解(Java/Cpp/Python)
    ......
  • [JLU] 数据结构与算法上机题解思路分享-第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A二叉树的创建与遍历分数10作者朱允刚单位吉林大学通过带空指针信息的先根序列(......