ACM寒假第七讲
一、Stockbroker Grapevine
设计思路
题目要求对于不同股票经纪人的数据集,以及联系人员,传递消息的时间,找到最短的传递时间,使得能够传递给所有人。典型的图问题,而且是有权图,于是想到利用弗洛伊德算法来做(谢天谢地这学期学了数据结构以及离散数学,弗洛伊德算法和迪杰斯特拉算法都不是一般的难),查找文档和参考网上资料,可以将弗洛伊德算法的代码形式进行填充,之后再对时间进行判断即可。
设计代码
1 |
|
二、树的直径
设计思路
题目要求对于一颗n个节点的树,要求这颗树的直径包含的边的个数的多少。首先,对于树这一类特殊的图来说,直径表示这棵树上存在的最长路径,可知,用广度优先是计算不出来的,必须采用深度优先进行深入才可能找到,之后利用模板先进行深度搜索。再进行逐步排查,即可得出答案。
设计代码
1 |
|
三、Invitation Cards
设计思路
题目简单来说,要求输入N个案例之后,求得为志愿者支付的旅行费用的最小金额。可以简单看出带权的路径问题,考虑利用迪杰斯特拉算法来做,同时引出一个新思路——反向建图,这样可以有效减少时间复杂度。
设计代码
1 |
|
四、战略游戏
设计思路
这个题目主要要考虑给定了n个节点的树,要求如何保证放置最少士兵的情况下,使得该节点的所有边都可以被瞭望到。听起来虽然比较陌生,但是当画图后可以发现,和深度优先遍历脱不开干系。所以还是考虑深度优先算法,不过由于数据不多,考虑采用线性表的形式进行存储即可。
设计代码
1 |
|
五、学习总结
在这次C++代码中,初步认识了图论以及在其中的运用,重新认识了几个经典的图论相关算法。原本只是想来混德育分的但是感觉受益匪浅,希望在之后还能用到相关的知识,祝各位寒假愉快,谢谢大家。
ACM寒假第七讲
https://gaster44.github.io/2025/02/19/ACM寒假第七讲/