Floyd算法——全源最短路

cerr:标准输出错误流:不会输出到freopen制定的out文件中,而是会输出到错误文件中。

提交上去无论加不加freopen,哪怕是提交到洛谷,也只是比较out文件中的值,而不会管cerr输出的东西

好处:调试的时候用cerr,哪怕忘删调试调试

例题1:传递闭包

floyd可以直接算,但复杂度太高

压缩:用bitset优化

bool:00000001/00000000

bitset:1/0

bool&bool运算时间:O(n)

bitset&bitset:O(n/w)(w是机器字长,一般考试是64,即优化速度快了64倍)

这里看一下这的算法:

假设有一条1-2-3-4的链

f[1]=1100,即能到达12点,到不了34

1:1100    由于这里1能够到达2if(f[i][k])成立,才能用2去更新1的所有可达点

2:1110

————

1:1110

3:0111

————

1:1111

这样经过两轮更新,就能到34了

(p.s:其实实际上不是逮着一个点一直更新它,这样可能有更新不到的情况。实际上是先用一个点去更新所有可达点(先枚举k))

例题二:灾后重建

方法一:把所有讯问离线下来,按照t升序进行回答,在排回去

但是这道题保证了Q次讯问的t是不降的,所以就不用离线下来排序了

而且村庄标号越大,解封时间越晚

所以直接枚举点的标号就是解封顺序

用k来代表目前解封到第几个点了

当k<n时(总共就n个点,想干啥)并且k这个点解封的时间早于讯问时间(那么在它之前所有点都解封了)

那么以新解封的k这个点作为中转点,对所有之前的点进行更新

然后再向后探索一个点,知道新的点不存在或未解封

如果讯问的时间中k已经跑过一遍,就不用再跑一遍,直接用这张最后更新的图输出结果就行

输出时要特判:1.起点终点是否尚未解冻2.起点终点之间是否有连线

例题3:无向图的最小问题

假设这个环上就三个点,那么环得长度就是三个点之间的最短路径和

先跑Floyd

假设这三个顶点分别是ijk,那么最短环就是ij+ik+jk之间的最短路

但是一个例子:1-2-3链

很明显:没有环

但是Floyd会将1-3之间强制加上一条长度为1-2+2-3的边

这样程序就会算出最小环位1-2-3-2-1,很明显,有重边,肯定不行

怎么解决?

既然Floyd会强制改变边,那么我们就把边提前备份出来一边,不让Floyd动不就好啦

等用完了再让Floyd动也不迟

代码中mp表示打死不动,我们备份出来的原边长

f代表我们已经用完了,让Floyd去算完的边长

我们先固定下来一个点k,是这个环路径上经过的所有点中编号最大的那个

再枚举两个互不相同的点ij且比k小

kij的环必须是k到i、j的直接路径+i、j之间的最短路径长度

枚举完所有符合条件的环之后,要以k为中转点对所有点更新f数组

因为k以后再也不可能是k了,只能作为最短路径上的中转点

新的一轮ijk,ki、kj都是mp用的直接距离不会有影响

而ij之间的f数组求的是以所有比k小的的点为中转点的最短路

换句话说,ij这条边你就算走出花来,也不可能经过k点或比k更大的点

这样就可以完美地列举所有环了

(倒数第三行的INT_MAX改为1e8)

例题四:Redistributing Gifts S

把最优性转换成可行性问题,用传递闭包解决

建图,如果u看得上v的礼物,觉得v的礼物比他的好,那么就建一条边u->v

然后先跑一遍传递闭包,求出所有可达点

如果i可以到达j点,那么说明i可以拿到j的礼物

最后就输出每一个奶牛,如果它能拿到愿望清单上的1号礼物,就输出1号(不一定就是礼物1,只是排名最靠前的那个)

如果能,就输出完了broke掉,否则就下一个,直到找到最靠前的(肯定能找到的,毕竟自己到自己要设为可达)

代码吗……嘿嘿,手速慢没截到,要不那个时候的我(不会吧?我的博文还有除我以外的人看?)再补上?嘻嘻……反正坑是填不完的嘛

青岛oj集训5的更多相关文章

  1. 在Ubuntu虚拟机上搭建青岛OJ

    源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...

  2. PostgreSQL安装和使用

    青岛OJ系统用的关系型数据库是PostgreSQL,为此对PostgreSQL大致了解下. 今天的主要话题围绕下面两个方面: PostgreSQL安装 PostgreSQL使用 一.PostgreSQ ...

  3. OnlineJudgeServer运行

    我在这如下这两篇文章都说过青岛OJ相关的 OnlineJudgeFE之前端二次开发 青岛大学开源OJ平台搭建 今天我还是要来讲讲关于这个青岛OJ. 青岛OJ采用的是完全的前后端分离架构. Online ...

  4. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  5. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  6. JS省队集训记

    不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...

  7. 用python爬取杭电oj的数据

    暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...

  8. 8.4 正睿暑期集训营 Day1

    目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...

  9. 记:青岛理工ACM交流赛筹备工作总结篇

    这几天筹备青岛理工ACM交流赛的过程中遇到了不少问题也涨了不少经验.对非常多事也有了和曾经不一样的看法, ​一直在想事后把这几天的流水帐记一遍,一直没空直到今天考完C++才坐下来開始动笔.将这几天的忙 ...

  10. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

随机推荐

  1. [转载] ABP框架理论学习之后台工作(Jobs)和后台工作者(Workers)

    介绍 ABP提供了后台工作和后台工作者,它们会在应用程序的后台线程中执行一些任务. 后台工作 后台工作以队列和持续的方式在后台给一些即将被执行的任务排队.你可能因为某些原因需要后台工作,比如: 执行长 ...

  2. Linux性能优化-网络性能优化思路

    目录 确定优化目标 网络性能工具 网络性能优化 应用程序 套接字 传输层 网络层 链路层 确定优化目标优化前,首先要确定观察到的网络性能指标,要达到多少才合适?虽然网络性能优化的整体目标,是降低网络延 ...

  3. WebSocket,IsWebSocketRequest与AspNetWebSocketContext

    asp.net新建一个服务端程序,用来处理链接服务端: 1,新建一个处理程序 .ashx using System; using System.Collections.Generic; using S ...

  4. 使用树莓派学习Linux驱动 硬件环境评估

    1. 现有设备 surface,树莓派3B 简介 优点 缺点 树莓派+鼠标键盘显示屏 开发方便 需要购买小/静音键盘 需要购买显示屏 显示屏小了用着不舒服,大了太贵 树莓派不需要显示屏!将来还要刷机不 ...

  5. Kotlin:【针对空安全管理的操作】安全调用操作符、使用带let的安全调用、非空断言操作符(感叹号操作符)、使用if判断null值情况、使用空合并操作符(类似三元表达式)

     具体使用:

  6. 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管理系统

    作者主页: 有来技术 开源项目: youlai-mall︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 仓库主页: GitCode︱ Gitee ...

  7. Jetpack架构组件学习(6)——使用Glance实现桌面小组件

    原文地址: Jetpack架构组件学习(6)--使用Glance实现桌面小组件-Stars-One的杂货小窝 公司陆续整了几个Compose写的app,有个小组件的功能,顺便试了下Jetpack库里的 ...

  8. uni-app如何只用插件市场中的插件

    将你需要的插件下载下来.比如说如下图 在pages.json配置 globalStyle是一个单独的字段 "globalStyle": { "usingComponent ...

  9. RocksDB 二级缓存

    本文分享自天翼云开发者社区<RocksDB 二级缓存>,作者:b****n RocksDB 团队正在实现对非易失性介质上的块缓存的支持.可以看作是 RocksDB 当前的易失性块缓存的扩展 ...

  10. 『Python底层原理』--CPython的变量实现机制

    在Python中,变量的使用看起来非常简单,例如 a = 10,s = "hello"等等. 然而,这种简单的赋值操作背后,CPython其实做了很多复杂的工作. 本文将通过一些简 ...