博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APIO2015 雅加达的摩天楼
阅读量:5347 次
发布时间:2019-06-15

本文共 1995 字,大约阅读时间需要 6 分钟。

首先可以看出这是一道求最短路的题目,但暴力建图最多n2 条边,所以考虑建图优化

对于p>sqrt(n) 的青蛙可以直接暴力建,最多n*sqrt(n) 条边

对于p<sqrt(n) 的青蛙添加辅助点,枚举这sqrt(n)个长度,每个长度建立n个辅助点前后对应连边,同时向它们可以到达的点以及可以到达它们的点连边

1 #define MAXN 4000010UL 2 #include 
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 int n, m, t, inf, S, T, d[MAXN], dis[MAXN], mp[30010][175];10 bool ins[MAXN];11 12 struct Edge {13 int hou, nt, zhi;14 }sg[MAXN<<2];15 16 void Add(int x, int y, int z) {17 sg[t] = (Edge){y, d[x], z}, d[x] = t ++;18 return;19 }20 21 void Spfa(int x) {22 memset(dis, 0x3f, sizeof(dis));23 inf = dis[0];24 dis[x] = 0;25 queue
q; q.push(x);26 while(!q.empty()) {27 int op = q.front(); q.pop();28 ins[op] = false;29 for(int i = d[op] ; i != -1 ; i = sg[i].nt) if(dis[sg[i].hou]>dis[op]+sg[i].zhi) {30 dis[sg[i].hou] = dis[op]+sg[i].zhi;31 if(!ins[sg[i].hou]) {32 ins[sg[i].hou] = true;33 q.push(sg[i].hou);34 }35 }36 }37 return;38 }39 40 int main() {41 memset(d, -1, sizeof(d));42 scanf("%d%d", &n, &m);43 int blo = (int)sqrt(n), tot = n-1;44 for(int i = 0 ; i < n ; ++ i) {45 for(int j = 1 ; j <= blo ; ++ j) mp[i][j] = ++ tot, Add(tot, i, 0);46 }47 48 for(int i = 0 ; i < n ; ++ i) {49 for(int j = 1 ; j <= blo ; ++ j) {50 if(i+j
=0) Add(mp[i][j], mp[i-j][j], 1);52 }53 }54 for(int i = 0, b, p ; i < m ; ++ i) {55 scanf("%d%d", &b, &p);56 if(i==0) S = b;57 if(i==1) T = b;58 if(p<=blo) Add(b, mp[b][p], 0);59 else {60 for(int j = 1 ; b+j*p < n ; ++ j) Add(b, b+j*p, j);61 for(int j = 1 ; b-j*p >= 0 ; ++ j) Add(b, b-j*p, j);62 }63 }64 Spfa(S);65 if(dis[T]==inf) printf("-1");66 else printf("%d", dis[T]);67 return 0;68 }
View Code

 

转载于:https://www.cnblogs.com/assassain/p/5439841.html

你可能感兴趣的文章
多校HDU5723 最小生成树+dfs回溯
查看>>
ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
查看>>
关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
查看>>
关于Entity Framework中的Attached报错的完美解决方案终极版
查看>>
Selenium之Web页面滚动条滚操作
查看>>
组合数据类型练习,英文词频统计实例上
查看>>
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
UIScrollView —— 缩放实现案例(二)
查看>>
【Qt】Qt Linguist介绍【转】
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
视觉设计师的进化
查看>>
Python/jquery
查看>>
WPF之Binding
查看>>
【BZOJ】【2132】圈地计划
查看>>
HTML图片映射实用
查看>>
DP题目 sicily 1687 Permutation
查看>>