链接
题解
前言
对于给出的三份$\texttt{SSSP}$的程序,考虑分析其时间复杂度。
$\texttt{Floyd:}$无论如何都是$O(n^3)$,与询问无关。
$\texttt{Dijkstra:}$搞了个堆优化,$O(n\log n)$,一上负权图就$\texttt{GG}$。
$\texttt{Bellman-Ford:}$一旦有负权照样退化成$O(qnm)$。
$\texttt{Subtask 1}$
卡$\texttt{Floyd}$,让$\texttt{Dijkstra}$过。
由于$\texttt{Floyd}$总是$O(n^3)$,所以考虑构造一个$101$个点的图,没有边,就可以卡掉了。
$\texttt{Subtask 2}$
卡$\texttt{Bellman-Ford}$,让$\texttt{Floyd}$过。
要让$\texttt{Floyd}$过,$n=100$即可。然后每个点随机连一些负权边,让$\texttt{Bellman-Ford}$不断的进行松弛操作,再带上$10$组询问就可以卡掉了。
这里我的策略是前$50$个点随机连$11$条边,后$50$个点随机连$10$条边,在这种随机图上很容易卡掉。
$\texttt{Subtask 3}$
跟$\texttt{Subtask 1}$一样。
$\texttt{Subtask 4}$
卡$\texttt{Dijkstra}$,让$\texttt{Floyd}$过。
先来看一个图:
这样一个图诱导$\texttt{Dijkstra}$走边权为$0$的边,走着走着就发现原来的那条不是最短路,就白白走了许多路径。用这种方法卡掉即可。
$\texttt{Subtask 5}$
卡$\texttt{Bellman-Ford}$,让$\texttt{Dijkstra}$过。
考虑到代码中的一个性质:每一次都是所有顶点进行松弛操作,而且只要有改变最短路就可以再松弛一遍,所以考虑构造一堆自己连向自己的负环,再在$0$和$1$之间连重边就可以卡掉啦qwq。
$\texttt{Subtask 6}$
只要你$\texttt{Subtask 4}$做得好的话,这个点也是一样的。
$\texttt{Subtask 7}$
染色问题,让你卡爆搜。
生成一个随机图就可以啦。
$\texttt{Subtask 8}$
让你构造数据使得爆搜通过。
考虑把点染色,异色的点之间连边,同色点之间不连边,于是就完了。
代码
1 |
|