此博文长期更新
第一题 网络流
- 源于poj 1659,这道题解法是Havel-Hakimi定理
- 我出的题目
- 一个有向图,已知各点的初度和入度,目标是还原整幅图
- 解法是:
- 拆点,从源点向1-N建边,流的大小为入度,各点向1’-N’建边,流的大小为1,1’ - N’向汇点建边流的大小为出度,求解最大流
- 如果 最大流等于出度和(出度和==入度和)那么此图可解,然后从各点找到拆点的边,如果流为1那么有一条边,由此解出整幅图
第二题 树状数组,离散化
- 源于hdu 4288 , 这题的解法是线段树,区间合并
- 我出的题目
- 题意:给 一个队列,队列里的元素大小是唯一的,然后给三个操作:
- 删除队列你值为x的元素
- 在队列末尾添加值为y的元素
- 求值为z的元素在队列中的位置
- 解法:
- 离线处理,离散化所有的值
- 建一个树状数组, size表示队列的大小
- 对于添加操作,从前往后处理数据,对于每一个元素的离散值,把这个离散值映射到树状数组size的位置,size之后加1
- 对于删除操作,把该元素在树状数组的映射值更新为0
- 对于 查找操作,把该元素在树状数组的映射值,向前求和即可
- 题意:给 一个队列,队列里的元素大小是唯一的,然后给三个操作:
第三题 线段树,树上染色
- 源于fzu2176,
- 我出的题目
- 题意:给一有n个节点的树,开始没有颜色,以1为根,然后2个操作
- 把以x为根的树的所有节点(或边)染成x
- 询问以y为根的树被染成了多少种不同的颜色
- 解法:
- 先一次dfs,把所有的点映射到线段树上,同时记录下各个根节点为树的区间
- 然后hash一下颜色,更新一下区间即可
- 提高难度:
- 把询问改成从a节点到b节点有多少段颜色,就比较恶心了,代码复杂度太高
- 题意:给一有n个节点的树,开始没有颜色,以1为根,然后2个操作