弦图(Chordal Graph)学习小记

前言这是个什么神仙玩意儿?(仙图 先把结论贴出来方便背板,证明什么的啃完再补 考NOI前千万不要点开什么毒瘤的技能树 所以现在点 由于很懒所以想到哪写到哪一些约定GGG无向图 G[S]G[S]G[S]点集S的诱导子图 δ(S)δ(S)\delta(S)点集S的临集一些定义弦连接环上不相邻两点之间的边弦图任意长度>=4的环都有至少一条...
摘要由CSDN通过智能技术生成

前言

这是个什么神仙玩意儿?(仙图
先把结论贴出来方便背板,证明什么的啃完再补
考NOI前千万不要点开什么毒瘤的技能树
所以现在点
由于很懒所以想到哪写到哪

一些约定

G G G无向图
G [ S ] G[S] G[S]点集S的诱导子图
δ ( S ) \delta(S) δ(S)点集S的临集

一些定义

连接环上不相邻两点之间的边

弦图

任意长度>=4的环都有至少一条弦的图
这是弦图,这不是弦图.jpg

单纯点

一个点v是单纯点当且仅当 G [ δ ( v ) ] + v G[\delta(v)]+v G[δ(v)]+v是团

完美消除序列

一个n的排列v1,v2,v3…vn,满足vi在vi,vi+1,vi+2…vn的诱导子图中是一个单纯点

一些性质

弦图的判定

一个图是弦图当且仅当其有完美消除序列

最大势算法(MCS)

每个点有一个标号label[v],初始label[v]=0
从后往前确定完美消除序列中的每一个元素,每次选择label最大的点v加入序列,并将 δ ( v ) \delta(v) δ(v)中的点的label+1
具体实现可以开n个队列,不需要删除
复杂度O(n+m)

void MCS() {
    int mx=0;
    fo(i,0,n) lst[i+n+1]=0;
    fo(i,1,n) sz[i]=0,vis[i]=0,add(n+1,i);
    fd(j,n,1) {
        int p=0;
        for(++mx;!p;) {
            --mx;int Id=mx+n+1;
            while (int k=lst[Id]) {
                int x=t[k];
                lst[Id]=nxt[k];
                if (!vis[x]) {
                    vis[x]=1;
                    rep(i,x) {
                        int y=t[i];
                        if (!vis[y]) {
                         
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值