[APIO2013]出题人tasksauthor

提交答案题真好玩

简单来说就是构造数据不把程序A卡T却把程序B卡T.
[APIO2013]出题人tasksauthor_第1张图片

然后来看看这张表.十分的友好.
那么一个一个点来做吧.

每个程序对每一个数据都会有一个对应的counter,当counter>1000000的时候就是TLE


首先来看看问题1qwq:

有一些限定要求.

对于每个点的要求是给出了一个T,表示的是这个点输出的整数个数的上限.
如果超出的话就只能获得部分分.

然后是对构造出的数据的硬性要求.
1. 0 < V <= 300
2. 点i的出度是一个非负整数
3. * |边的权值| <= 1000000*
4. 0 < Q <=10
5. 询问的点位于图内
6. 所有询问的起点x不等到任意一个负环

然后这些东西很重要啊…因为没仔细读题导致这个子问题我一分都没有啊qwq
然后还有可以注意的就是边的权值可以为负

1\3

给的程序B:FloydWarshall

可以通过阅读代码发现 Floyd的复杂度就是n^3,和Q没有一点关系.
所以只需要n=101就可以顺利卡掉了

如果你没有和愚蠢的我一样Q=0

2\5

给的程序B:OptimizedBellmanFord

怎么卡掉OptimizedBellmanFord呢.

通过noi2018我们知道 只要来个神奇网格图就可以啦.
所以这个点也是十分好通过的

如果你没有和愚蠢的我一样Q=100+

然后同时这里也有一个比较方便的解法就是 .
造一个负环2->3->2.然后每次询问0->1,但是又有BellmanFord只要出现改变就会一直跑下去,所以是能够跑满的,而且又满足不到1的限制.

4\6

给的程序B:ModifiedDijkstra

怎么卡掉这个不算log的神仙Dijkstra呢?
看起来完全没可能呢?

但是!这张图可以有负权边!
然而我们知道正常的dijk是不会用来跑负权图的,因为可能会答案错误或者复杂度错误.

在这里就需要一些构造来使得ModifiedDijkstra爆炸.

首先观察程序,发现复杂度是所有的点入优先队列次数的和.

那么就是考虑让一个点尽可能多的被赋值,那么就是通过一些方法让实际上较短的路苟着.等后面都更新过了之后在突然蹦出来吧后面所有的点都在更新一次.

然后就可以构造出这样子的东西了.

     A
    / \
  4/   \0
  /     \
 v  -8   v
B- - - - >C

然后就会先更新到C,然后从C向后更新一波,回来之后又发现好像C能更优,然后再更新一波.这样往复的话,有n个这样的三角形就可以做到2^n的复杂度.

然后就构造完啦.

问题2

给定n个节点e条边的无向图G,要求给所有节点编号,并且要求所有边直接相连的两个节点的编号不能相等.

然后是十分重要的要求

70 < V < 1000
1500 < E < 1000000

因为其实7\8都是针对同一个程序,分别要求将其卡T,和不卡T.

那么随便写一个能够输出合法方案的程序,就肯定可以获得其中的一部分分数.

一般来说这个时候都能把程序卡T但是就是有的人(我)没有判重边然后惨惨啦

那么TLE的部分就解决了 好随便

之后让他不T的一部分数据要怎么解决呢?
并且还要满足边数的限制.

那么考虑至少需要两种颜色,有什么添加边的方式可以让图只有两种颜色并且边数足够呢…?

考虑所有的点的颜色分布是这样的
01010101010101…

那么考虑吧所有01之间连边,就变成了这样.

    |-------------------|
    |                   |
    |-----------|   |---|-------|
    |           |   |   |       |
0 - 1 - 0 - 1 - 0 - 1 - 0 - 1 - 0 - 1 ......
|           |   |   |       |   |
|-----------|   |---|-------|
|                   |       |
|-------------------|       |
|                           |
|---------------------------|

剩下的部分意会一下就好了…然后只需要70个点就可以满足有1500条边的要求了.
题目就完美的解决了qwq

小结

其实这个才是重点啦.
提交答案题的确很好玩不过在比赛的时候很可能就玩出问题了[ 比如一开始觉得自己能AC然后发现好像好多条件都没有看清楚最后导致只拿了最后一个点的分也真是惨惨 ]

你可能感兴趣的:(提交答案题,图论)