题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/1038429908921778176
题目要求
当用容器运输货物时,一些货物是不能装在一起的。现在告诉你哪些货物能装在一起,给你一些货物,请判断这些货物是否可以被装在一起
输入
N:不能装在一起的货物对的数量,不超过10000
M:要运输的货物的组数,不超过100
N组不能装在一起的货物:每组包括两个货物索引
M组货物
第一个数字K(不超过1000)是货物的数量,然后剩下的是货物索引(5位数字)
输出
对于M组货物中的每组,如果其中没有不可以装在一起的货物则输出Yes,否则输出No
题解一
思路
这个思路会超时
- 通过map和hash记录两个货物是否可以被装在一起,相当于一个邻接矩阵
- 为什么不定义矩阵?如果要用矩阵,在这里就需要定义一个100000×100000的bool矩阵,大概会占用10GB,而内存限制是64MB。
- 对于每组货物,两两判断是否不相容,是一个两层循环,时间复杂度是$K^2$,再算上M组查询,时间复杂度就是$MK^2$,最大值为100×1000×1000=1e8,大概会耗时1秒,肯定会超过400ms的时间限制。
代码
1 | // Problem: PAT Advanced 1149 |
题解二
思路
使用邻接表保存每个货物的不能装在一起的货物
对于每组货物,使用一维数组保存每个货物是否在这组货物中
查询邻接表,并通过一维数组判断每个货物的不相容货物是否出现在这组货物中
这里也是用了两层循环,但这两层循环的时间复杂度是$N$,再算上M组查询,时间复杂度就是$MN$,最大值为100×10000=1e6。
代码
1 | // Problem: PAT Advanced 1149 |
参考链接
https://blog.csdn.net/liuchuo/article/details/82560836
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!