zqdnr's ideas

本文详细介绍了三种算法在解决特定问题中的应用:网络流用于还原有向图,树状数组处理离散化操作,线段树实现树上染色任务。包括具体题目的来源、解法以及难度提升建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


此博文长期更新


第一题 网络流

  • 源于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节点有多少段颜色,就比较恶心了,代码复杂度太高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值