记录一个菜逼的成长。。

题目链接

题目大意:
给你n个数,a1,a2,...,ana_1,a_2,...,a_n表示在第i个点可以跳向i+aii+a_i点或i−aii-a_i点,
输出从每个点开始,跳向最后一个点步数。

我们可以反着做,从最后一个点开始bfs,搜能跳向当前点的点。

#include <bits/stdc++.h>
using namespace std;
#define ALL(v) (v).begin(),(v).end()
#define cl(a,b) memset(a,b,sizeof(a))
#define clr clear()
#define pb push_back
typedef long long LL;
template <typename T>
inline void read(T &x){T ans=0;char last=' ',ch=getchar();while(ch<'0' || ch>'9')last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans;x = ans;
}
/******************head***********************/
const int maxn = 100000 + 10;
int vis[maxn],a[maxn],step[maxn],n;
vector<int>ve[maxn];
void bfs(int x)
{queue<int>q;q.push(x);cl(vis,0);cl(step,-1);vis[x] = 1;step[x] = 0;int s = 1,cnt = 1,tmp = 0;while(!q.empty()){int f = q.front();q.pop();if(cnt)cnt--;for( int i = 0; i < ve[f].size(); i++ ){int v = ve[f][i];if(!vis[v] && (v+a[v] == f || v-a[v] == f)){vis[v] = 1;step[v] = s;q.push(v);tmp++;}}if(!cnt){cnt = tmp,tmp = 0,s++;}}
}
int main()
{freopen("jumping.in","r",stdin);int T;scanf("%d",&T);while(T--){scanf("%d",&n);for( int i = 1; i <= n; i++ )ve[i].clr;for( int i = 1; i <= n; i++ ){read(a[i]);ve[min(i+a[i],n)].pb(i);ve[max(0,i-a[i])].pb(i);}bfs(n);for( int i = 1; i <= n; i++ ){printf("%d\n",step[i]);}}return 0;
}

ECPC16-E. Jumping(bfs)相关推荐

  1. Team Silver_Bullet 训练记录

    Team members Vec Grunt henryrabbit To do list team:起队名 每周组队训练 补题 Vec: Grunt:切题,切题,切更多的题!做好切所有类型题的觉悟! ...

  2. UVA10120 ZOJ1229 Gift?!【DFS+BFS】

    Gift?! Time Limit: 2000 msMemory Limit: 65536 KB There is a beautiful river in a small village. N ro ...

  3. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  4. HDU1548:A strange lift(Dijkstra或BFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...

  5. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  6. usaco Overfencing 穿越栅栏(BFS)

    Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...

  7. 数据结构--搜索BFS

    文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...

  8. 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝

    题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序. 思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步. 剪 ...

  9. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路

    题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...

  10. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

最新文章

  1. P1156 垃圾陷阱
  2. 小马拉大车,无线网络优化
  3. 爆笑:可怜的话剧演员
  4. cts游戏手机版_cts游戏
  5. SQLAlchemy 多条件查询
  6. js获取当前月的第一天和最后一天
  7. linuxpython源文件_Python3 源码安装(Linux 版)
  8. 网络数据包收发流程:从驱动到协议栈
  9. MTK Android 配置pmic电源
  10. 【集合论】集合运算 ( 并集 | 交集 | 不相交 | 相对补集 | 对称差 | 绝对补集 | 广义并集 | 广义交集 | 集合运算优先级 )
  11. thunderbird 配置exchange邮箱
  12. java程序员出路在哪里,使用/教程/实例
  13. 安装Ubuntu系统卡在载入界面,显示正在安装open vm tools
  14. 日了。这个竟然还不让发
  15. 数据结构之SWUSTOJ954: 单链表的链接
  16. Fractions (水)
  17. Z-Stack + OSAL操作系统
  18. 清除node_modules 缓存
  19. 图解+原理推导完全读懂KPM算法
  20. Unity 得到游戏组件的常用的两种方法

热门文章

  1. html 控件enabled,用 Enabled 和 disabled 属性禁用 HTML 控件后,取值结果
  2. python商城管理系统_【程序源代码】全端商城管理系统(后台+小程序)
  3. 用python函数画德国国旗代码_给我一面国旗 python帮你实现
  4. python爬虫爬取豆瓣电影为啥内容有缺失-Python爬虫之抓取豆瓣影评数据
  5. quest2 APK破解游戏包安装器 如何安装方法
  6. 装完nvme固态经常蓝屏_NVMe固态硬盘安装Win7蓝屏0x0000007B快速解决方法
  7. 澳洲计算机信息安全专业,澳洲网络信息安全专业有哪些牛校?本科硕士有哪些方向可以选择?...
  8. 计算机毕业设计之疫情防疫信息化管理系统
  9. 埃默里大学有计算机专业吗,埃默里大学计算机科学研究生最新专业排名
  10. 中国人和犹太人做生意的区别