题答练习
\(Task\ 1\)
用\(Dijkstra\)卡\(Floyd\)?
\(101\)个点,一坨\(0\)就好了.
\(Task\ 2\)
\(Floyd\)卡\(Bellman-Ford\)?
\(99\)个点,一条倒过来的链就好了,加一坨重边.
\(Task\ 3\)
同\(Task\ 1\)
\(Task\ 4\)
\(Floyd\)卡\(Dijkstra\)?
有点意思.
由于可以有负权边,\(Dijkstra\)是指数的.
搞成这样就行啦.
\(Task\ 5\)
同\(Task\ 2\)
\(Task\ 6\)
现在不是最短路了.
要染色.
现在卡\(DFS\)?
随一组可行的即可.
\(Task\ 7\)
放\(DFS\)过?用二分图即可.
\(UOJ83\)
博主太菜只会\(Task\ 1\sim 5\)
这是卡排序题
\(Task\ 1\)
归并卡计数?一个\(10000000\)计数就没了.
\(Task\ 2\)
冒泡卡选择?
很有意思.
看到\(T\)和\(200W\)相差不大,考虑卡常.
冒泡的常数比选择小,但是每有一个逆序对复杂度\(+3\),而选择复杂度只\(+2\)
因此我们不轻易加逆序对.
先搞一个从\(1\sim n\)的数列,发现\(n\geq 1991\)的时候冒泡就\(GG\)了.
因此\(n\)定在\(1990\).
然而我们卡不掉选择.
考虑人肉二分,让他多几个逆序对.
我们把最后一项拿出来,放到\(1468\)的后面(倒数第\(521\)项还是\(522\)项数不清楚)
此时冒泡复杂度刚好为\(T\).
\(Task\ 3\)
归并卡快排?
显然是卡复杂度.
快排每次选中间,那么我们精心构造之后它就是\(n^2\)的.
再次人肉二分发现\(n=1984\)时刚好卡掉快排.
\(Task\ 4\)
计数卡冒泡?
考虑我们定下\(n\)之后,由于计数的复杂度是确定的\(4117\),因此我们可以直接计算\(a_{max}\)
那么我们人肉二分知道\(n=1014\),\(a_{max}=26\)的时候刚好卡掉.
不要忘记\(a\)中还有\(0\).
\(Task\ 5\)
选择卡冒泡?
和\(Task\ 4\)差不多.
考虑先建出和\(Task 4\)差不多的数据.
\(n\)暂定\(1014\).
然后我们模拟退火!
每次随机将一个数的个数\(+1\),让另一个数的个数\(-1\)
我是这样写的:假设我们选了\(2\)个数,个数分别是\(x,y\).
我们随一个数\(t\in [1,\frac{min(x,y)}{3}]\),然后令\(x=x+t,y=y-t\)即可.
然后经过微调发现\(n=1015,max=25\)时较优.
最后退出来选择大约需要\(536161\).
据说爬山也可以过.
\(Task\ 6\)
用猴子排序卡快排\(QAQ\)
最不靠谱的排序卡最快的排序???
不会告辞
写完这两道题手都快断了\(QAQ\)