zoukankan      html  css  js  c++  java
  • 图论

    T1

    题目大意:给定一个n个点m条边的有向图,对于每条边求其翻转后是否SCC个数发生变化(n<=1000,m<=200000)

    假设现在考虑一条边(u,v),设去掉这条边后u->v,v->u的状态分别为L,R

    1>L=1,R=1 u,v一定在同一个SCC里一定不变

    2>L=0,R=0 一定不在也不变

    3>L=0,R=1 SCC-1,这种情况直接对于每个点dfs一遍即可

    4>L=1,R=0 考虑所有u的出边那么L=1说明前缀和后缀的边至少有一个可以到达v的路径,直接dfs即可

    T2

    题目大意:给定一个n个点m条边的有向图,边权都为1,求出每条边(u,v)被删掉后u到v的最短路(n<=1000,m<=100000)

    首先枚举根S之后bfs求出最短路树

    假如删去(S,T)

    那么在树上T的子树的最短路才会受到影响

    这些点的最短路都可以由外界点更新出一个初始值

    之后内部更新直接跑DJ/SPFA多个log不是很能过

    因为权值只有1,所以最短路的距离不超过n

    考虑维护n个队列,每个队列i存储dis=i的所有点

    模拟DJ的过程便可以去掉log

    T3

    小凸和小方是好朋友,小方给了小凸一个 n×m(n≤m)的矩阵 A,并且要求小凸从矩阵中选出 n 个数,其中任意两个数都不能在同一行或者同一列。
    现在小凸想知道,选出的 n 个数中第 k 大的数的最小值是多少。

    把选(i,j)转化为i->n+j连一条边

    那么问题转化为匹配问题

    二分答案后跑最大流即可

    T4

    首先有个神仙建图:

    对于每张牌,反面颜色->正面

    那么一个方案合法则意味着每个点的入度小于等于1

    对于每个联通块分别考虑,设某个联通块点数为V,边数为E

    1>V<E 显然一定有一个点入度大于1

    2>V=E-1树形dp一下得出每个点为根的最小翻转数

    3>V=E是个基环树,环上两种方向考虑一下,外向树上都是确定的

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/AthosD/p/12388283.html
Copyright © 2011-2022 走看看