APIO2013 taskauthor

喜闻乐见的提答题,这道题还是蛮有趣的

数据结构题写得心塞,来一道提答意思意思

如果喜欢这类题的话还可以去做做uoj83

这题是给出了两个问题,一个最短路,一个无向图染色问题。

Data 1

Floyd VS Dijkstra

嗯107个整数,我们只要给一个n=102,下面一坨0 Floyd就狗带了

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    printf("102\n");
    for(int i=1;i<=102;i++) puts("0");
    puts("1");
    printf("%d %d\n",1,102);
}

Data 2

啥Floyd 艹 Bellman-Ford?

看了一下代码…似乎真的可以随便艹掉。

Floyd:O(n^3),询问O(1)。

Bellman-Ford:询问O(ne)。

似乎随机数据一波就行?然而随机数据烂了。

这个点就是想让我们得到一个让bellman-ford和理论复杂度相差无几的数据。

其实很简单啊…加一坨没用的自环,然后剩下的搞一个5->4->3->2->1这样的链即可。

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    puts("80"); int mm=1500;
    printf("%d ",mm);
    for(int i=1;i<=mm;i++) printf("%d %d ",0,2333);
    putchar(10);
    for(int i=1;i<=79;i++) printf("1 %d 2333\n",i-1);
    puts("10");
    for(int i=1;i<=10;i++) printf("79 0\n");
}

Data 3

Bellman-Ford vs Floyd

用data 1即可

Data 4

Floyd 艹 Dijkstra!限制157个数!

咦似乎文件名叫“ModifiedDijkstra”看起来非常厉害

看了一下代码似乎没什么问题

咦可以有负权边…

怎么搞呢?如图所示。

这里的更新顺序会变成0,2,4,3,4,1,2,4,3,4,这样再接上去几个就成了指数级啦

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int bs=3*(1<<17),n=35; //可能要调一下
    printf("%d\n",n);
    for(int i=0;i<n;i++)
    {
        if(i==n-1) {puts("0"); continue;}
        else if(i&1) printf("1 %d %d\n",i+1,-(bs/=2));
        else printf("2 %d %d %d %d\n",i+1,-1,i+2,-2);
    }
    puts("10");
    for(int i=1;i<=10;i++) printf("0 %d\n",n-1);
}
时间: 2024-10-10 12:24:26

APIO2013 taskauthor的相关文章

【BZOJ】【3205】【APIO2013】机器人robot

斯坦纳树 好神啊……Orz zyf && PoPoQQQ 为啥跟斯坦纳树扯上关系了?我想是因为每个点(robot)都沿着树边汇到根的时候就全部合起来了吧= =这个好像和裸的斯坦纳树不太一样,那个是无向最小生成树,这个是有向图…… 引用题解: 令f[l][r][i][j]表示在点(i,j)将编号在[l,r]区间内的机器人全部合并的最小推动次数 则有动规方程组: f[l][r][i][j]=min{f[l][r][_i][_j]+1} ( (_i,_j)->(i,j) ) f[l][r]

APIO2013 tasksauthor

喜闻乐见的提答题,这道题还是蛮有趣的 数据结构题写得心塞,来一道提答意思意思 如果喜欢这类题的话还可以去做做uoj83. 这题是给出了两个问题,一个最短路,一个无向图染色问题. Data 1 Floyd VS Dijkstra 嗯107个整数,我们只要给一个n=101,下面一坨0 Floyd就狗带了 #include <iostream> #include <stdio.h> using namespace std; int main() { printf("101\n&

BZOJ 3205 [Apio2013]机器人 ——斯坦纳树

腊鸡题目,实在卡不过去. (改了一下午) 就是裸的斯坦纳树的题目,一方面合并子集,另一方面SPFA迭代求解. 优化了许多地方,甚至基数排序都写了. 还是T到死,不打算改了,就这样吧 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm

BZOJ3206 [Apio2013]道路费用

题解啊...明天补吧... 好累啊... 1 /************************************************************** 2 Problem: 3206 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:8040 ms 7 Memory:8232 kb 8 ***************************************************************

BZOJ 3205 Apio2013 机器人 斯坦纳树

题目大意:给定一张地图,一些地方有障碍物,有k<=9个机器人,可以一推到底,遇到转向器会转向,两个编号相邻的机器人可以合并,求最少推多少次可以全部合并 令f[l][r][i][j]表示在点(i,j)将编号在[l,r]区间内的机器人全部合并的最小推动次数 则有动规方程组: f[l][r][i][j]=min{f[l][r][_i][_j]+1} ( (_i,_j)->(i,j) ) f[l][r][i][j]=min(f[l][temp][i][j]+f[temp+1][r][i][j]) (l

bzoj3205: [Apio2013]机器人

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3205 思路:类似斯坦纳树的想法 但是因为这里的合并必须连号 所以子集枚举就变成了区间合并 说说做法好了 首先记搜搜出每个点向四个方向走一步会到哪里 注意:转向器可能导致机器人一直在里面转出不来,要特判掉 然后设f[l][r][x][y]表示当前合并的机器人是[l,r],合并点是(x,y) 两种转移: 枚举子区间,合并f[l][r][x][y]=min(f[l][mid][x][y],f[m

bzoj千题计划230:bzoj3205: [Apio2013]机器人

http://www.lydsy.com/JudgeOnline/problem.php?id=3205 历时一天,老子终于把它A了 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 因为不懂spfa的优化 以及 数组越界  TAT ┭┮﹏┭┮ 牢骚发完了,题解在下面  (⊙o⊙)… n只有9,很像状压dp dp[l][r][x][y] 表示在(x,y)位置 合成了x-y复合机器人 的最少推动次数 它的转移 存在后效性 所以上 斯坦纳树 自身的转移:dp[l][r][x][y]=min{dp[l

bzoj 3206: [Apio2013]道路费用【最小生成树+并查集】

参考:http://hzwer.com/6888.html 把k条道路权值设为0,和其他边一起跑MST,然后把此时选中的其他边设为必选,在新图中加上必选变缩成k个点,把所有边重标号,枚举k跳边的选取情况,和其他边做MST,建出树,k条边的权值在树上取min #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=300005,inf=1e9; int

[APIO2013]机器人(斯坦纳树)

题目描述 VRI(Voltron 机器人学会)的工程师建造了 n 个机器人.任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人. 我们把机器人用 1 至 n 编号(n ≤ 9).如果两个机器人的编号是连续的,那 么它们是兼容的,可以合并成一个复合机器人.最初这 n 个机器人各自都只有唯 一的编号.而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号, 分别是构成它的所有机器人中最小和最大的编号. 例如,2 号机器人只可以与 1 号或 3 号机器人合并.若 2 号机器人与 3 号