DP&图论  DAY 5  上午

POJ 1125 Stockbroker Grapevine

有 N 个股票经济人可以互相传递消息,他们之间存在一些单向
的通信路径。现在有一个消息要由某个人开始传递给其他所有
人,问应该由哪一个人来传递,才能在最短时间内让所有人都接
收到消息。

Solution

全局最短路

Floyd

POJ 1502 MPI Maelstrom

给出 N 个处理器之间传递信息所需时间矩阵的下三角,求信息
从第一个处理器传到其它所有处理器所需时间最大值。

Solution

单源最长路   dij(n m logn)

n^2 logn

POJ 1511 Invitation Cards

N 个点 M 条边的有向图,询问对于所有 i,从点 1 出发到点 i 并
返回点 1 所需时间最小值。

Solution

# 正向建图 + 单源最短路
# 反向建图 + 单源最短路 ,所以就是把有向边反过来,从点1出发 dij 其实是反向最短路

POJ 1724 ROADS

有 N 个城市和 M 条单向道路,每条道路有长度和收费两个属性。
求在总费用不超过 K 的前提下从城市 1 到城市 N 的最短路。

Solution

Dijkstra,同时维护当前路径总费用,超过费用上限的状态不再转移

对于每个点拆成k个点,(u,0),(u,1),.......(u,k)

分层图

 POJ 1797 Heavy Transportation

给出 N 个点 M 条边的无向图,每条边有最大载重。
求从点 1 到点 N 能通过的最大重量。

 Solution

1.二分答案,假设最大载重>=mid,只能通过限重>=mid的边,加到图中,判断连通性

2.最大生成树 krus,判断 1---n 连通性,连通即终止

从大到小加边,第一次连通1和n那么那条边就是答案

并查集维护加入前 k 大边时的连通性

3.dijkstra   变种单源最短路,路径长度改为路径边权最小值

if ( dis[v] < min(dis[u],w) )  dis[v] = min( dis[u] , w )

POJ 1062昂贵的聘礼http://poj.org/problem?id=1062 )

PS:注意酋长地位不一定是最高的

Solution

 先对于地位升序排列,然后枚举[酋长,酋长+m]这个区间来作为最大的地位
 跑区间长度次最短路

从原价的超级远点跑dij,然后到点1

1.建图,物品作为点,替代关系作为边,优惠价格是长度

比如  酋长女儿<------水晶球    权值是优惠价格

从某物品出发交换至酋长允诺就是一条路径

不考虑地位限制,从酋长允诺出发求单源最短路即可知道从任意一点出发所需金币

   这是一个反向最短路  反向 dij

2. 枚举地位等级区间,不在地位等级区间内的点不可经过,枚举量 O(N) 
    为了“间接交易”合法,枚举的区间左右端点等级之差<=m

也就是 max - min <= m  ,为了使得在一个区间内有更大的交易余地,我们设定max-min=m

然后考虑在这区间内部的都可以交易,不合法的就在图中删掉

看数据,m可能很大,但是n小,然后就考虑枚举点作为区间端点

3.剩下的合法的图跑反向 dij

BZOJ 3040 最短路 *

N 个点, M 条边的有向图,求点 1 到点 N 的最短路(保证存在)。
1 ≤ N ≤ 1000000, 1 ≤ M ≤ 10000000
By lydrainbowcat
边集分为两部分:
# 随机生成
# 输入给出

Solution

1. 采用高效的堆来优化 Dijkstra 算法。
    # 斐波那契堆
    # 配对堆

dij ,一个大图就凉

SPFA太小,凉

dij 用支持修改删除的堆,配对堆

2.用 pq 做,随机生成的数据不要,直接删掉

https://paste.ubuntu.com/p/Mp2fXMKv8J/

  *d就是只输入不赋值

priority_queue  STL实现合并

启发式合并,两个堆,A,B,把较小的堆拆了,放到较大的堆里面

每个点最多产生 logn 次代价

最小生成树算法

Prim

// Prim

void prim() {
memset(dis, inf, sizeof dis);
heap.push(data(, dis[] = ));
int ans = ;
while (!heap.empty()) {
data t = heap.top(); heap.pop();
if (dis[t.u] != t.d)continue;
ans += t.d;
for (int i = hd[t.u], v, w; i; i = nt[i])
if (v = to[i], w = vl[i], dis[v] > w)
heap.push(data(v, dis[v] = w));
}
}

Kruskal

复杂度卡在排序上

证明依赖于拟阵的知识。

> 拟阵

独立集

交换性的推论:一个集合的所有极大独立集大小都相同。

如果不相同,就交换

线性相关:向量*常数,加起来,是0向量

拟阵最优化

POJ 1258 Agri-Net

有 N 个村庄,村庄之间形成完全图。现给出邻接矩阵,选择总
长度尽可能小的边将 N 个村庄连通。

>最小生成树

POJ 2421 Constructing Roads

有 N 个村庄,有一些道路已经存在,现在希望用最少的总长度
将所有村庄连通。

>将已经存在道路设置长度为 0。

POJ 2560 Freckles

给出平面上 N 个点,求将所有点连通的最小距离和。

>O(N2) 建边。

POJ 1789 Truck History

有 N 个编号,每个编号均为 7 位数。两个编号之间的距离定义
为其不同位个数,由一个编号生成另一个编号代价为两个编号的
距离。希望用最小总代价从某一编号开始生成所有编号。

>O(N2) 建边。

一开始没看明白T,距离就是比较两个编号各位数字,然后计算有几位不同

BZOJ 1601 灌水

>Solution

BZOJ 2743 滑雪与时间胶囊

Solution

高度从大到小,边从小到大

能够到达的景点容易通过 DFS 或 BFS 求出。

最优解应当构成树形,所需要的时间即为所有边长度之和。易联想到用最小生成树 Kruskal 算法解决本问题。

如何设置 Kruskal 时边的优先级?如何保证选出的有向边集使得每个点从 1 出发可达?

以到达点高度为第一关键字,边长度为第二关键字。到达点高度高的边优先,同样高时边长度短的优先。

BZOJ 2561 最小生成树 *

(放到晚上)

树上倍增

序列倍增

树上倍增

f[i][j]表示结点编号

如何求解 u 向上移动 k 步是哪个点?

最近公共祖先

Tarjan 支持离线

DFS序+RMQ 支持在线

树上DFS有回溯操作,每个点被放进的次数就是相邻边数,所以序列长度2n

记录每个点第一次被放进序列,最后一次放进序列

对于两个点,A,B,最晚的A,最早的B,卡一个区间,区间内出现过 LCA(A,B),而且不存在比他深的节点,区间深度最小,就是 LCA

向上路径

如何求解从 u 到 v 路径上边权最值?保证 v 是 u 的祖先。

树上路径

如何求解从 u 到 v 路径上的边权和?

将路径拆分为两段向上路径,分别求解其答案再合并。

DP&图论 DAY 5 上午的更多相关文章

  1. DP&图论 DAY 7 上午

    DP&图论  DAY 7  上午 图论练习题 P2176 [USACO14FEB]路障Roadblock 先跑最短路(最多n条边,否则出环) 枚举每条边,加倍,再跑 dijkstra 取最大 ...

  2. DP&图论 DAY 6 上午

    DP&图论  DAY 6  上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [ ...

  3. DP&图论 DAY 4 上午

    DP&图论  DAY 4  上午 概率与期望 概率◦某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A).◦假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那 ...

  4. DP&图论 DAY 3 上午

    DP&图论  DAY 3  上午 状态压缩dp >状态压缩dp ◦状态压缩是设计dp状态的一种方式.◦当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维 ...

  5. DP&图论 DAY 6 下午 考试

    DP&图论  DAY 6  下午  考试 样例输入 样例输出 题解 >50 pt      dij 跑暴力 (Floyd太慢了QWQ    O(n^3)) 枚举每个点作为起点,dijks ...

  6. DP&图论 DAY 5 下午

    DP&图论  DAY 5  下午 树链剖分  每一条边要么属于重链要么轻边 证明: https://www.cnblogs.com/sagitta/p/5660749.html 轻边重链都是交 ...

  7. DP&图论 DAY 4 下午图论

    DP&图论  DAY 4  下午 后天考试不考二分图,双联通 考拓扑排序 图论 图的基本模型 边: 有向边构成有向图 无向边构成无向图 权值: 1.无权 2.点权 3.边权 4.负权(dij不 ...

  8. DP&图论 DAY 2 下午

    DP&图论  DAY 2  下午 基础树形DP 前言◦ 1:与树或图的生成树相关的动态规划.◦ 2:以每棵子树为子结构,在父亲节点合并,注意树具有天然的子结构.这是很优美的很利于dp的.◦ 3 ...

  9. DP&图论 DAY 1 下午

    DP&图论  DAY 1  下午  区间和序列上的DP 序列上的DP >序列上的dp状态设计最基本的形式 F[i]表示以 i 结尾的最优值或方案数.◦ F[i][k]表示以 i 结尾附加 ...

随机推荐

  1. Spring特点与工作原理

    根据多个参考资料,总结如下: Spring的概念 Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系.它是一种容器框架,用于创建bean,维护bean之间 ...

  2. 第五篇.python进阶

    目录 第五篇.python进阶 1. 异常处理 2. 数字类型内置方法 2.定义: 3.常用操作+内置方法: 4.存一个值or多个值: 5.有序or无序: 6.可变和不可变 1.用途: 2.定义: 3 ...

  3. source命令用法:

    命令格式 source FileName 作用 在当前bash环境下读取并执行FileName中的命令. 注意 该命令通常用命令"."来替代.如:source .bash_rc 与 ...

  4. linux使用nginx配置web服务器

    环境: CenterOS 7 1.安装nginx之前先安装nginx所需的依赖包 yum -y install zlib zlib-devel openssl openssl-devel pcre p ...

  5. ioping测试

    ioping 一个实时显示磁盘io延时的工具,以类似ping 的输出一样展示输出结果 常用参数: -c count stop after count requests. -i interval Set ...

  6. 腾讯数据安全专家谈联邦学习开源项目FATE:通往隐私保护理想未来的桥梁

    数据孤岛.数据隐私以及数据安全,是目前人工智能和云计算在大规模产业化应用过程中绕不开的“三座大山”. “联邦学习”作为新一代的人工智能算法,能在数据不出本地的情况下,实现共同建模,提升AI模型的效果, ...

  7. Vim生存技能

    Vim生存技能 必备:   写模式: i,a,o   退出写模式: ecs 快捷:   Ctrl+u: 向文件首翻半屏   Ctrl+d: 向文件尾翻半屏   Ctrl+f: 向文件尾翻一屏   Ct ...

  8. JavaScript柯里化(currying)

    参考: https://www.jianshu.com/p/33392cb4b055 https://ruby-china.org/topics/38385 https://stackoverflow ...

  9. MFC总结

    1.首先是ListControl 简介: 列表视图控件List Control同样比较常见,它能够把任何字符串内容以列表的方式显示出来,这种显示方式的特点是整洁.直观,在实际应用中能为用户带来方便. ...

  10. 201871010105-曹玉中《面向对象程序设计(java)》第十七周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十七周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...