zoukankan      html  css  js  c++  java
  • 图论题目总结

    图论题目总结


    都是水题 不用看了
    链接不加了,自己搜去
    爆ぜろリアル!弾けろシナプス!バニッシュメント......ディス、ワールド!


    • bzoj1877
      一条边只经过一次,求路径最多时的最小总长度
      无脑费用流

    • codeforces 295B
      一个图,每次删去一个点,问你每次删点之前各点之间最短路之和
      这不明显倒过来搞floyd么
      就是把删点转换成加点,每次加入一个点并加入和这个点有关的边,然后利用新加入的点做中间点松弛一下最短路。其实就是变化一下floyd最外层循环的顺序。整个复杂度(O(n^3))。但是一定要注意,加入一个点后,要先更新出各个点到这个点的距离和这个点到其他各个点的距离,然后再去松弛其他的点。

    • poj1236
      给出一些传递关系,问你1、有多少个起点2、加入多少个边才能让整个传递关系只有一个起点
      SCC缩点,第一个答案就是入度为零的点的个数,第二个问题的答案就是max(入度为零点的个数,出度为零点的个数)
      自己画画图就明白了

    • poj1274
      裸的二分图匹配

    • poj1325
      两台机器,各有好几个状态。每个任务只能在A的某个状态或B的某个状态下完成,问怎么安排执行顺序和所用的机器使得切换状态的次数最小
      A的状态放左边,B的状态放右边,能执行同一个任务的两个状态连一条边,就是最小点覆盖。因为不同的点代表不同的状态,所以最小点覆盖就是答案。

    • poj1422
      每个点只能被走一次,问最少多少条路径
      裸的最小路径覆盖

    • poj2226
      一个矩阵,一些位置是.另一些是*,问你最少用多少个1*n的木板能覆盖所有的*而不覆盖.。木板可重叠,长度任意
      处理出每一行和每一列连续的*块,行块放左边,列块放右边,有交点就连边,就变成了最小点覆盖。

    • poj1904
      好题,不太好理解
      题意不复述了,自己看
      首先我们如果枚举判定是要TLE的。
      所以直接构图:
      儿子建一堆点,女孩建一堆点;
      儿子喜欢那个女孩,连一条边;
      原配从女孩向儿子连边;
      然后强连通缩点,一个强连通分量里的儿子所喜欢的女孩就是他能娶的。
      为什么?
      如果某个儿子A选择了非原配的某个女孩,那么就代表着有另外一个儿子B被挤走了,所以他就要选择另外一个女孩,不然就变成NTR展开的对不对。同理儿子B挤走儿子C,以此类推……如果有某个儿子X没得选了,他就注孤生了对不对,简直喜闻乐见大快人心对不对,但这是不合法的,题目要求的是HAPPYENDING。所以如果一堆儿子能互相挤来挤去他们所喜欢的女孩合在一起一定是他们的原配集合对不对,所以就一定在同一个强连通分量里对不对,所以上面那种构图就成立了对不对

    • poj2060
      给你一堆出租车的预约方案,问最少多少个出租车能满足所有预约
      还是裸的最小路径覆盖

    • poj2186
      给出一个有向图,问你有多少个点能从其他所有的点到达
      SCC缩点后,出度为零的点如果大于一个,答案是0;否则答案是出度为零的那个点所代表的点的个数

    • poj2446
      用1*2的纸片覆盖一个矩阵,其中有一些点不能覆盖,纸片不重叠,问你能否全部覆盖
      黑白染色交叉连边直接匹配

    • poj2536
      裸的二分图匹配

    • poj2553
      找出度为0的强连通分量

    • poj2942
      一堆人,有的互相讨厌,要围成一个奇圈,讨厌的人不能相邻,问有多少人不可能参加进来
      无向图的点双联通分量
      要用到以下显然的结论:

    1. 简单图中一个圈上的所有点一定属于同一个点双联通分量
    2. 一个图是二分图等价于没有奇圈,反之亦然,这是充要条件
      所以求点双联通分量然后对于每个分量分别染色判断是不是二分图就行了
      关于点双连通分量的一些注意事项:
    3. 一个无向图中一个点可能属于多个点双联通分量,这样的点一定是割点
    4. 一条边一定只属于一个点双联通分量
    • poj3020
      1*2的纸片覆盖所有给出的点,可以重叠,求最小的纸片数量
      孤立点(上下左右都没有要覆盖的点)单独处理,剩下的就是最小点覆盖

    • poj3041
      一个矩阵中有一些点需要清理,一次能清理一行或一列,问最少清理几次
      裸的最小点覆盖

    • poj3207
      2-sat

    • poj3352
      一个无向图加多少条边才能双联通
      求出边双联通分量,重新构图,答案就是(度数为1的点+1)/2,原因自行画图就明白了

    • poj3422
      一个矩阵,每个点有权值,从左上到右下走K次,求走过的最大权值和。一个点走过一次权值就没有了
      显然的点权,拆点,拆出的两点之间连一条容量1,费用为点权的边,再连一条容量INF,费用0的边表示可以重复走但权值只计算一次,矩阵中相邻两点连容量INF,费用0的边,建超级源汇限一下最大流量K,跑费用流就行。要把spfa反过来求最长路,因为显然没有圈所以大丈夫

    • poj3469
      有一个双核处理器,一堆任务,给每个任务分配一个处理器,每个任务在不同的处理器费用不同,有一些任务对如果不在同一个处理器要消耗额外一定费用,问最小费用。
      A处理器放左边B处理器放右边就变成了最小割

    • poj3692
      裸的最大独立集

    • sgu185
      真是感人的一道题。
      让你求两条边不相交的最短路径(点可以相交,两条路径的长度必须都是最短路)。
      时限0.25s,内存4M
      真是感人。
      我自己YY了一个先求最短路然后费用流构图判断的方法但是感觉非常的不靠谱,尤其是这种感人的资源限制下绝对跑不出来
      这个题的想法很好
      首先跑一个最短路,然后把所有最短路上的点拿出来重新构图,因为其余的点肯定没用。一个点在最短路上的条件就是(dis(b)+len(a->b)==dis(b))。重新构图后两点之间连流量是1的边,超级源汇限一下2个流量,一遍最大流验证即可。
      反正我的非递归GAP当前弧优化的ISAP(还是SAP?我不知道)是能过这个题,据说有些没有优化的Dinic过不了?不知道
      但是内存4M就太感人了,一定不能开两个图。用一个bool表记录一下两点之间有没有边,然后清空上一个图直接重建新图这样就不会爆内存了

    • uva10004
      二分图判定
      黑白染色

    • zoj2587
      判断最小割是否唯一
      求出最大流后分别从S和Tdfs一遍,dfs到的点合起来如果不是所有的点那就不唯一。

    • hdu4786
      一个图边有黑白两色,问你有没有一个生成树含有斐波那契数个白边。
      分别求一下白边最多和最少的生成树中白边的数量A和B,两个值之间有Fibonacci数就有,否则没有
      因为如果原图是联通的,那么不断删去黑边加入白边图仍然一定是联通的,所以一定存在介于A和B之间任意个白边数的生成树。


    代码太多,托管到github上去了

  • 相关阅读:
    C# 文件压缩与解压(ZIP格式)
    sqlite 报 no such table 错误
    又一次的轮回
    什么是数据结构
    紧张繁忙的一周
    《编程匠艺》读书笔记之十九
    [转]软件开发者面试百问
    关于学习设计模式的一些废话
    雷人的山寨版搜索引擎
    [转]Struts 2.1发布
  • 原文地址:https://www.cnblogs.com/loveidea/p/3938816.html
Copyright © 2011-2022 走看看