【概述】

LexBFS 是字典序广度优先搜索(Lexicographic BFS),其常用于弦图的判定。

每次按从 n 到 1 的顺序依次给点编号,每个点维护一个 list,用于记录与其相邻的已标号点的标号,每次选择 list 中字典序最大的未标号点标号。

LexBFS 与 BFS 的不同,在于每次扩展的结点加了特殊的顺序

检查时利用桶排的思想,在更新一个点的 list 时,新建一个桶,且任何时候桶的数目不超过 n,通过维护桶中元素来进行判定

【实现】

struct Edge{int to;Edge(){}Edge(int to):to(to){}
};
struct Node{int id,num;Node(){}Node(int id,int num):id(id),num(num){}friend bool operator<(Node a,Node b) {return a.num<b.num;}
};
int n,m;
int G[N][N];
vector<Edge>edge[N];
int link[N],tot;//标号序列
int order[N];//完美消除序列
int num[N];//点编号
int bucket[N];//更新一个点的标号序列时的桶
bool vis[N];void bfs(int x){//维护标号序列memset(num,0,sizeof(num));memset(link,0,sizeof(link));memset(vis,0,sizeof(vis));tot=n;priority_queue<Node> Q;Q.push(Node(x,1));while(!Q.empty()) {Node now=Q.top();Q.pop();if(!vis[now.id]){vis[now.id]=true;link[tot]=now.id;order[now.id]=tot;tot--;if(tot==0)break;}for(int i=0;i<edge[now.id].size();i++) {int to=edge[now.id][i].to;num[to]++;if(!vis[to])Q.push(Node(to,num[to]));}}
}
bool check() {bfs(1);//维护标号序列for(int i=1;i<=n;i++){int minn=n+1;int tail=0;//桶的指针int value;for(int j=0;j<edge[link[i]].size();j++) {int to=edge[link[i]][j].to;if(order[to]>i) {if(minn>order[to]) {minn=order[to];value=to;}bucket[tail++]=to;//入桶}}for(int j=0;j<tail;j++) {if(bucket[j]!=value&&G[value][bucket[j]]==0)return false;}}return true;
}
int main() {scanf("%d%d",&n,&m);memset(G,0,sizeof(G));for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);edge[x].push_back(y);edge[y].push_back(x);G[x][y]=1;G[y][x]=1;}if(check())printf("Yes\n");elseprintf("No\n");return 0;
}

图论 —— 弦图 —— LexBFS 算法相关推荐

  1. 图论 —— 弦图 —— MCS 算法

    [概述] MCS 算法是最大势算法(Maximum Cardinality Search),其常用于弦图的判定.求弦图的最大团.最小着色.最大独立集.最小团覆盖等. 一个无向图的弦图当且仅当其有一个完 ...

  2. 图论:关于弦图的几个图论结论

    定义 弦:连接环中不相邻的两个点的边 一个图是弦图当图中任意长度大于3的环都至少有一个弦. α(G):\alpha(G):α(G):图GGG中最大独立集的大小,称为最大独立集数 κ(G):\kappa ...

  3. neo4j python 算法_图论与图学习(二):图算法

    选自towardsdatascience 作者:Maël Fabien机器之心编译参与:熊猫 图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构.检 ...

  4. 图论算法 最短路程_图论与图学习(二):图算法

    选自towardsdatascience 作者:Maël Fabien 机器之心编译 参与:熊猫 图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构 ...

  5. 概率图模型-可分解图-连接树算法-弦图-图论

    概率图模型–精确推断算法的原理 本文主要内容 本文从可分解图出发,逐渐引入弦图,三角化图,然后揭示了为什么引入可分解图,因为可分解图是在连接树算法中最终得到的,还讲解了为什么要使用连接树算法,因为连接 ...

  6. 图论:弦图最小点染色

    弦图的定义:当图中任意长度大于3的环都至少有一个弦时, 一个无向图称为弦图 不存在四角.五角等关系就说明这个图是一个弦图 题目问的是,任何一对相互认识的人不可以组一队,问最多可以组多少对 所有的人构成 ...

  7. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

  8. 实战|基于图割算法的木材表面缺陷图像分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 鉴于图割方法的明显优势,白雪冰及其团队采用G ...

  9. P3196 [HNOI2008]神奇的国度(弦图的最小染色问题)

    整理的算法模板合集: ACM模板 题目传送门 K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国 ...

最新文章

  1. 【天命奇御】成就进度62/71的通关攻略(1·开篇前言)
  2. RegeX —— 可视化正则表达式替换器
  3. 如何在 Flutter 和 Dart 中检查数字字符串
  4. php session页面传值,PHP session在页面间传递的问题
  5. virtualenv: 未找到命令
  6. windows10 搜索桌面搜索功能失效的解决
  7. 记账本记录日常收支,使用图表查看项目
  8. 单细胞文章解读——用单细胞RNA测序技术分析与肿瘤转移相关的细胞间通讯
  9. 如何确定今天是星期几
  10. 电脑突然蓝屏要怎么办?电脑为啥会蓝屏?
  11. windows xp 安装python3.4.4(xp最高支持到3.4.4,后续版本不支持)
  12. 为大家推荐一个全新的跨平台app软件开发工具——Lae软件开发平台
  13. 乐2 乐视X621_官方线刷包_救砖包_解账户锁
  14. 应急通信于气象雷达的应用
  15. 单片机中断系统应用实例(两组实验+Proteus仿真+C源程序)
  16. Android Studio 连接阿里云数据库【制作基于数据库的多人远程聊天APP】
  17. BI神器Power Query(3)-- PQ从表格导入数据
  18. paypal IPN and PDT 2
  19. Unity UGUI Batches合批规则详解(含源码)
  20. P1135 奇怪的电梯(BFS)

热门文章

  1. 全球最大的披萨公司,在中国干不过必胜客?
  2. CANOpen紧急报文
  3. 线程切换是如何给 CPU 洗脑的?
  4. Redis 发布订阅,小功能大用处,真没那么废材!
  5. JEECG 3.7 新装亮相,移动APP发布
  6. P3-weixin-2.0.1 版本发布,JAVA微信插件框架
  7. javamail发送邮件的简单实例
  8. cmake打包ICONV库
  9. Linux进程实践(3) --进程终止与exec函数族
  10. Redis通讯协议RESP详解