http://uoj.ac/problem/111

好像NOIP里面的题目...有好多都是...能通过xjbg剪枝来...AC题目的?

得好好学一下这些剪枝黑科技了...

思路:我觉得这位大佬说的很完善了:http://blog.csdn.net/herano/article/details/58639052

竟然能卡分块暴力...hack数据不良心...不过好像最坏情况的边实在是太多了,没办法改变MLE的结局...?(其实3000000还好吧?)

然后就是xjbg优化了,对每一个块删除重复跑的。对于step<=sqrt(n)的,我们如果找到了下一个块中存在step相同的,我们就不用再找了,好像就是这样= =。

然后spfa跑一波即可(竟然卡了dijstra,难道要手写堆吗?)

  1. //看看会不会爆int!数组会不会少了一维!
  2. //取物问题一定要小心先手胜利的条件
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. #pragma comment(linker,"/STACK:102400000,102400000")
  6. #define LL long long
  7. #define ALL(a) a.begin(), a.end()
  8. #define pb push_back
  9. #define mk make_pair
  10. #define fi first
  11. #define se second
  12. #define haha printf("haha\n")
  13. const int maxn = + ;
  14. int n, m;
  15. int d[maxn];
  16. vector<int> G[maxn];
  17. bool have[maxn][ + ];
  18. int s, t;
  19. bool vis[maxn];
  20.  
  21. int solve(){
  22. queue<int> que;
  23. memset(d, 0x7f, sizeof(d));
  24. d[s] = ;
  25. que.push(s);
  26. while (!que.empty()){
  27. int u = que.front();
  28. que.pop();
  29. vis[u] = false;
  30. for (int i = ; i < G[u].size(); i++){
  31. int step = G[u][i];
  32. for (int j = ; u + step * j < n; j++){
  33. int v = u + step * j;
  34. if (d[v] > d[u] + j){
  35. d[v] = d[u] + j;
  36. if (!vis[v]){
  37. que.push(v);
  38. vis[v] = true;
  39. }
  40. }
  41. if (step <= && have[v][step]) break;
  42. }
  43. for (int j = ; u - step * j >= ; j++){
  44. int v = u - step * j;
  45. if (d[v] > d[u] + j){
  46. d[v] = d[u] + j;
  47. if (!vis[v]){
  48. que.push(v);
  49. vis[v] = true;
  50. }
  51. }
  52. if (step <= && have[v][step]) break;
  53. }
  54. }
  55. }
  56. return d[t] == 0x7f7f7f7f ? - : d[t];
  57. }
  58.  
  59. int main(){
  60. cin >> n >> m;
  61. for (int i = ; i < m; i++){
  62. int a, b; scanf("%d%d", &a, &b);
  63. if (i == ) s = a;
  64. if (i == ) t = a;
  65. G[a].pb(b);
  66. if (b <= ) have[a][b] = ;
  67. }
  68. for (int i = ; i < n; i++){
  69. sort(ALL(G[i]));
  70. G[i].erase(unique(ALL(G[i])), G[i].end());
  71. }
  72. printf("%d\n", solve());
  73. return ;
  74. }

spfa+剪枝 或者 dij+手写堆+剪枝 UOJ 111的更多相关文章

  1. 手写堆优化dijkstra

    \(dijkstra\) 算法的堆优化,时间复杂度为\(O(n+m)\log n\) 添加数组\(id[]\)记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 #incl ...

  2. Luogu [P1334] 瑞瑞的木板(手写堆)

    其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...

  3. AC日记——手写堆ac合并果子(傻子)

    今天整理最近的考试题 发现一个东西叫做优先队列 priority_queue(说白了就是大根堆) 但是 我对堆的了解还是很少的 所以 我决定手写一个堆 于是我写了一个简单的堆 手写的堆说白了就是个二叉 ...

  4. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  5. [转载] 管Q某犇借的手写堆

    跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多. 其实就是维护了一个二叉堆,写进结构体里,就没啥了... 据说达哥去年NOIP靠这个暴力多骗了分 合并果子... templat ...

  6. BZOJ 1975 魔法猪学院(A*+手写堆)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1941  Solved: 595 [Submit][Sta ...

  7. 手写堆_C++

    一般主程序中拿堆顶元素 x=h[]; h[]=h[top--]; down(); 在堆尾加入元素 h[++top]=x; up(top); 上浮下沉操作 inline void up(int x) { ...

  8. 手写堆的dijkstra

    颓废.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

  9. C++STL手写版

    手写STL,卡常专用. node为变量类型,可以自由定义,以下不再赘述. 1.stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可. struct stack{ int tp;n ...

随机推荐

  1. 王者荣耀交流协会final冲刺第五次scrum会议

    成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐,王磊拍照. master:高远博 2.时间跨度 2017年12月5日 18:00 - 18:31,总计31分钟 3.地点 一食堂二楼沙发座椅 ...

  2. c# dataGridView排序

    一.对阿拉伯数字进行自定义排序: 简单有效方法: 1.该列的sortmode属性为auto...(一般默认) 2.比如首列序号,添加该列数据的时候直接添加int即可.切忌不要用string. obje ...

  3. multipart/form-data post 方法提交表单,后台获取不到数据

    这个和servlet容器有关系,比如tomcat等. 1.get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do? ...

  4. centos7环境下mysql安装

    1.去官网下载合适的yum源安装包 https://dev.mysql.com/downloads/repo/yum/ 2.yum 本地安装 命令:yum localinstall mysql57-c ...

  5. Spring的事务到底该给Dao配置还是给Service配置

    Spring的事务到底该给Dao配置还是给Service配置 Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.serv ...

  6. shit Rap & mock api

    shit Rap & mock api https://thx.github.io/RAP/study.html https://github.com/thx/RAP/wiki/quick_g ...

  7. mysql(四)log

    慢查询: https://blog.csdn.net/leshami/article/details/39829605 日志组成: https://blog.csdn.net/leshami/arti ...

  8. 第179天:javascript中replace使用总结

    ECMAScript提供了replace()方法.这个方法接收两个参数,第一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数.现在我们来详细讲解可能出现的几种情况 ...

  9. HttpWebRequest和HttpWebResponse的应用

    创建使用类HttpHelper: public class Httpparam { public string UserAgent { get; set; } public string Accept ...

  10. ZOJ1827_The Game of 31

    这是一个比较经典的博弈题目,今年网赛好像是南京赛上有一个类似的题目. 这种题目是没有一定公式或者函数的,需要自己dp或者搜索解决. 题意为分别给你4张写有1,2,3,4,5,6的卡片共24张,每次轮流 ...