#图论个人总结三-个人总结

· · 个人记录

数据范围在50左右的图论相关的题很有可能是整数划分相关。即通过整数划分来枚举图的连通块的情况。

-- 引自课件

Floyd必须保证没有边的变动,最短路才正确

一道构造树的题

有一个n 个点的树,其中每条边有一个正整数边权,你并不知道这棵树的样子,只知道每两点间最短路长度,但是这些最短路长度可能是错误的,请你判断是否存在一棵树满足条件;

注意到边权都是正的;于是乎,对于最小的距离,那条边一定存在于树上,同理,我们求出这个图的最小生成树,这是唯一可能的答案,于是dfs判断一下就可以了;(这道题数据十分良心,样例不水)

见到特殊的二分图匹配,尝试挖掘性质,比如树形DP等

追及问题=逃跑者到达某个点的时间早于追捕者到达某个点的时间,取max即为答案

最小割的可行边和必经边

①对于任意一条满流边(u,v),(u,v)能够出现在某个最小割集中,当且仅当id[u]!=id[v];

②对于任意一条满流边(u,v),(u,v)必定出现在最小割集中,当且仅当id[u]==id[s]且id[v]==id[t]。

注意必须是满流边;

二分图匹配的可行边和必须边

先一次网络流,再跑一次tarjan求连通分量。

边(x,y)是可行边,要求(x,y)已是匹配边或(x,y)是非匹配边,但x和y处在同一个连通分量中。

边(x,y)是必须边,要求(x,y)已是匹配边且x和y不在同一个连通分量中。

01分数规划最优比例环(点权、边权)

在最优比例环中,一定是一个简单环,不会重复经过一个节点多次;

mid*边权-点权

图论建模:背包问题

点双的求法!!!

注意弹栈是弹到v出栈,不是弹到u

void tarjan(int x,int f)
{
    dfn[x]=low[x]=++dk;
    st[++tp]=x;
    for(ri i=head[x]; i; i=nx[i])
        if(v[i]!=f)
        {
            if(!dfn[v[i]])
            {
                tarjan(v[i],x), low[x]=min(low[v[i]],low[x]);
                if(dfn[x]<=low[v[i]])
                {
                    ++tot;
                    int t;
                    do
                    {
                        t=st[tp--];
                        adde(tot,t), adde(t,tot);
                    }
                    while(t!=v[i]);
                    adde(tot,x), adde(x,tot);
                }
            }
            else low[x]=min(dfn[v[i]],low[x]);
        }
}

有向图存在欧拉回路条件:每个点入度等于出度!

无向图判断两点之间是否存在经过奇数条边的路径

如何判断奇环边:跑Tarjan缩点双,在每个点双内部跑二分图染色判定有没有奇环,如果有,则点双内的所有边都在奇环上。

不用二分图染色的好方法:

我们可以在 Tarjan 的 dfs 树上黑(0)白(1)相间染色。如果发现有一条返祖边使得其两端点同色,那么就将后代打上标记。

点双有奇环,当且仅当该点双除了深度最小的那个点外,存在点被标记。

代码

Dilworth定理

对于一个DAG,其最长反链(选最多的点,使两两之间没有路径相连)=最小链覆盖(选最少的链,覆盖所有点)

而最小链覆盖可以用最小流来做,不用传递闭包。

删点变为加点,加点变为加边

利用边双的传递性,往往可以动态缩点

竞赛图的好性质

1.有哈密顿路径

2.若选择一个点,可以覆盖它本身和它的出边,那么最后选择的点数一定不超过O(\log n),原因是每次找到最大的删掉,点数最少会/2。证明:如果每个点的出度都<n/2,那么最后边有剩余。

无向图奇数度数

给定一棵无向图,选出一些边,使得每个点度数为奇数。找出任意一棵生成树,在树上DP即可(记录每个点已选的度数,决定它的父边是否选)

原因是如果最优解需要选一条非树边,那么我们可以把u,v链上的所有边取反,不选那条边,还是可行解。

带有特殊边的生成树计数

可以修改矩阵树定理的基尔霍夫矩阵,把特殊边的度数设为x。这种题不仅可用于红蓝边的计数,也可以用于“保留k条原树边”的题。

求二分图最小字典序完美匹配,在一般图上只能逐位确定!O(n^3)

Dij的结构体构造函数,如果dis是LL,参数也一定要是LL!

2-SAT比的是SCC编号!

NOI2017 游戏

这道题一定注意,当条件为假时,命题为真。但是当结论为假时,条件一定为假,不要忘记把这条边加上!当条件为假时,命题的条件就固定了。注意细节!

随机树的直径也是期望O(\log n)的,所以链修改可以暴力做

给出割集求大小

给出一张图,每次给出一个带方向的边割集(从S指向V-S),求出S的点数。

我们求出这张图的生成树,然后类比矿区,根据父子边和子父边加加减减子树和。

互不相同等于匹配

求最大匹配不方便,可以转为最大独立集