旅游的Final柱

题目连接:

http://acm.uestc.edu.cn/#/problem/show/1288

Description

柱神要去打Final啦(≧▽≦)/啦啦啦

柱神来到了异国他乡的普吉岛,柱神决定好好游览一番。

普吉岛的景点编号为11到NN,景点之间由双向的道路连接着,所有的道路的长度都是11。

柱神希望访问所有的景点,但是又不想耽搁太长的时间,所以柱神决定每天访问一个景点。

为了好好陶冶情操,柱神并不在路上花费太多的时间,所以柱神不会在连续的两天访问两个最短距离超过KK的景点。

由于柱神忙着打Final,所以旅行的方案就交个你了。

Input

第一行为两个整数N,KN,K,其中4<=N<=5004<=N<=500,3<=K<=N−13<=K<=N−1。

接下来NN行NN列,第ii行jj列的值aij=1aij=1或者aij=0aij=0。

如果aij=1aij=1,表示从景点ii到景点jj有一条长为11的道路,如果aij=0aij=0,则表示从ii到jj没有直接的道路。

图保证联通。

注意哦:数据以字符串的形式给出,只包含0和1,且aii=0

Output

输出一个11到NN的排列,第ii个数表示第ii天访问的景点编号。输出任意一组解即可。

Sample Input

4 3

0100

1010

0101

0010

Sample Output

1 3 2 4

Hint

题意

题解:

这道题给了你一个无向图,以及一个k,让你输出一个旅游方案,使得这个旅游方案恰好旅行每个点一次,且相邻的两个点之间的距离小于k。

这道题怎么做呢?

话音刚落,小郭同学发言了:“我觉得这个k的数据范围是500,我感觉瞎dfs一波或者bfs一波,再加点点随机化就好了。”

然后小郭同学非常开心的就去写了几发随机化,然后TLE,WA……

暴力显然是过不了了,那应该怎么做呢?

这是一道构造题,应该想想一些聪慧的办法。

这道题最困难的情况是什么呢?

答:他给你的那个无向图就是一颗树,且k就等于3。如果这个能够解决,那么显然原题目也就能解决啦。

这个怎么做呢?想啊想啊想啊。

想到了!

我们随便抓一个点,当做这个树的根,然后把这个点染成白色。然后剩下的点,与白点相连的点就染成黑色,与黑色相连的点就染成白色。

现在这棵树上的点,就只有黑点和白点了。

然后我们这样做:

定义函数dfs(x):

如果现在这个点是白点,那就输出这个点。

走向下一个与这个点相邻的点v,进行函数dfs(v)

如果现在这个点是黑点,那就输出这个点。

这样做之后,我们可以显然的发现,连续输出的两个点,如果都是黑色或者白色的话,距离等于2。连续输出的两个点是不同的颜色的话,距离为1或者3。

距离为3的情况是:

白4

|

黑3

|

白1--黑2

这样会输出1,2,4,3。

啦啦啦,显然这种构造方式,可以使得任意输出的连续两个点的距离小于等于3啦。

然后这道题就解决了~

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 505;
string s;
vector<int>E[maxn];
int vis[maxn];
void dfs(int x,int flag)
{
vis[x]=1;
if(flag==0)printf("%d ",x);
for(int i=0;i<E[x].size();i++)
{
if(vis[E[x][i]])continue;
dfs(E[x][i],!flag);
}
if(flag==1)printf("%d ",x);
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
cin>>s;
for(int j=0;j<s.size();j++)
if(s[j]=='1')E[i].push_back(j+1);
}
dfs(1,0);
}

CDOJ 1288 旅游的Final柱 构造题的更多相关文章

  1. cf251.2.C (构造题的技巧)

    C. Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabyt ...

  2. hdu4671 Backup Plan ——构造题

    link:http://acm.hdu.edu.cn/showproblem.php?pid=4671 其实是不难的那种构造题,先排第一列,第二列从后往前选. #include <iostrea ...

  3. Educational Codeforces Round 7 D. Optimal Number Permutation 构造题

    D. Optimal Number Permutation 题目连接: http://www.codeforces.com/contest/622/problem/D Description You ...

  4. Codeforces 482 - Diverse Permutation 构造题

    这是一道蛮基础的构造题. - k         +(k - 1)      -(k - 2) 1 + k ,    1 ,         k ,             2,    ....... ...

  5. BZOJ 3097: Hash Killer I【构造题,思维题】

    3097: Hash Killer I Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 963  Solved: 36 ...

  6. CF1110E Magic Stones(构造题)

    这场CF怎么这么多构造题…… 题目链接:CF原网 洛谷 题目大意:给定两个长度为 $n$ 的序列 $c$ 和 $t$.每次我们可以对 $c_i(2\le i<n)$ 进行一次操作,也就是把 $c ...

  7. CodeForces 297C Splitting the Uniqueness (脑补构造题)

    题意 Split a unique array into two almost unique arrays. unique arrays指数组各个数均不相同,almost unique arrays指 ...

  8. HDU 5355 Cake (WA后AC代码,具体解析,构造题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5355 题面: Cake Time Limit: 2000/1000 MS (Java/Others) ...

  9. 【构造题 贪心】cf1041E. Tree Reconstruction

    比赛时候还是太慢了……要是能做快点就能上分了 Monocarp has drawn a tree (an undirected connected acyclic graph) and then ha ...

随机推荐

  1. Coursera在线学习---第二节.Octave学习

    1)两个矩阵相乘 A*B 2)两个矩阵元素位相乘(A.B矩阵中对应位置的元素相乘) A.*B 3)矩阵A的元素进行平方 A.^2 4)向量或矩阵中的元素求倒数 1./V    或   1./A 5) ...

  2. perl6正则 5: [ ] / | / ||

    也就是可以把多种要匹配的写进[ ] 中, 第种用 | 分开就行了. | 与 || 有差别 |的话, 当匹配位置 相同时, 会取最长的, 而 || , 当前面的匹配成功, 后面的就不会再去匹配. / / ...

  3. python魔法函数__dict__和__getattr__的妙用

    python魔法函数__dict__和__getattr__的妙用 __dict__ __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值. 既然__dict__是个字典那么我们就 ...

  4. Ubuntu 下查看已安装的软件

    Ubuntu 下如何查看已安装的软件 1.查看安装的所有软件 dpkg -l 例如: dpkg -l | grep ftp 2.查看软件安装的路径 dpkg -L | grep ftp 也可以用 wh ...

  5. Nginx常见错误及处理方法

    转载:https://www.cnblogs.com/liyongsan/p/6795851.html 404 bad request 一般原因:请求的Header过大 解决方法:配置nginx.co ...

  6. java版云笔记(三)

    登录与注册写好了下来就是主页,今天写的是主页加载时笔记本列表的显示,ajax是固定的就不重点说了.主要说一下jQuery.data() 函数和jQuery.on() 函数. 注:这个项目的sql文件, ...

  7. java基础13 接口(及关键字:interface、implements)

    接口 1.接口的定义格式 interface 接口名{ } interface :接口的关键字 implements:实现接口的关键字 2.接口的作用 1.程序的解耦.(低耦合)        2.定 ...

  8. cfg 4 ocl

    http://blog.sina.com.cn/s/blog_6c868c470102v15y.html rnnlib真难装 http://sourceforge.net/p/rnnl/wiki/Ho ...

  9. Mybatis基础及入门案例

    这几天正在对SSM框架的知识进行一个回顾加深,有很多东西学的囫囵吞枣,所以利用一些时间进一步的学习.首先大概了解一下mybatis的使用,再通过一个案例来学习它. 什么是MyBatis Mybatis ...

  10. 洛谷 P1897电梯里的爱情 题解

    题目传送门 对于每个输入的第i个人,直接使用桶,但注意范围要开大一些. #include<bits/stdc++.h> using namespace std; ],x,sum,h,Max ...