弦图的定义:当图中任意长度大于3的环都至少有一个弦时, 一个无向图称为弦图

不存在四角、五角等关系就说明这个图是一个弦图

题目问的是,任何一对相互认识的人不可以组一队,问最多可以组多少对

所有的人构成的关系图是一个弦图(长度超过 3 的环中必有一条弦),求出它的完美性消除序列,根据完美消除序列逆序贪心的染色,最终所用的色数就是本题的答案

好难啊

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<algorithm>
 5 #include<cstring>
 6 #define inf 0x7fffffff
 7 #define ll long long
 8 using namespace std;
 9 inline ll read()
10 {
11     ll x=0,f=1;char ch=getchar();
12     while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
13     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
14     return x*f;
15 }
16 int n,m,cnt,ans;
17 int head[10005],d[10005],q[10005],col[10005],hash[10005];
18 bool vis[10005];
19 struct data{int to,next;}e[2000005];
20 void ins(int u,int v)
21 {e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;}
22 int main()
23 {
24     n=read();m=read();
25     for(int i=1;i<=m;i++)
26     {
27         int u=read(),v=read();
28         ins(u,v);ins(v,u);
29     }
30     for(int i=n;i;i--)
31     {
32         int t=0;
33         for(int j=1;j<=n;j++)
34         {
35             if(!vis[j]&&d[j]>=d[t])t=j;
36         }
37         vis[t]=1;q[i]=t;
38         for(int j=head[t];j;j=e[j].next)
39             d[e[j].to]++;
40     }
41     for(int i=n;i>0;i--)
42     {
43         int t=q[i];
44         for(int j=head[t];j;j=e[j].next)hash[col[e[j].to]]=i;
45         int j;
46         for(j=1;;j++)if(hash[j]!=i)break;
47         col[t]=j;
48         if(j>ans)ans=j;
49     }
50     printf("%d",ans);
51     return 0;
52 }

再补上一些区间图的定义和应用

给定一些区间,定义一个相交图为每个顶点表示一个区间,两个点有边当且仅当两个区间的交集非空。

一个图为区间图当它是若干个区间的相交图

区间图一定是弦图

应用有

1.给定n个区间,要求选择最多的区间使得区间不互相重叠。区间图的最大独立集。2.有n个积木,高度均为1,第i个积木的宽度范围为[Li, Ri],选择一个积木的下落顺序使得最后积木总高度尽可能小。把一层积木看成一个颜色,转化为区间图的色数问题。

好像解法依赖于一个极其复杂的数据结构?

转载于:https://www.cnblogs.com/aininot260/p/9624064.html

图论:弦图最小点染色相关推荐

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

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

  2. 图论 —— 弦图 —— LexBFS 算法

    [概述] LexBFS 是字典序广度优先搜索(Lexicographic BFS),其常用于弦图的判定. 每次按从 n 到 1 的顺序依次给点编号,每个点维护一个 list,用于记录与其相邻的已标号点 ...

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

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

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

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

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

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

  6. BZOJ 1006 神奇的国度(弦图的染色数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1006 题意:给定一个弦图,求最小染色数.就是用最小数目的颜色进行染色使得任意两个相邻的节 ...

  7. 弦图与完美消除序列(bzoj 1006: [HNOI2008]神奇的国度)

    诱导子图:子图中任意一条边的两个端点一定也都在这个子图中 最大团:团中任意两点之间一定都有边,而包含顶点最多的团就是最大团 最小团覆盖:用最少的团覆盖图中所有的点 最大独立集:独立集中任意两点之间一定 ...

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

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

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

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

最新文章

  1. ruby实时查看日志
  2. laravel上传文件报错:413 Request Entity Too Large
  3. ubuntu安装vscode的两种方法
  4. 单片机按键软硬件设计技巧!
  5. NYOJ746 整数划分
  6. ios beta 下载_如何回滚到iOS 10(如果您使用的是iOS 11 Beta)
  7. powermock模拟对象_使用PowerMock测试对象的内部状态
  8. 第 6 章 —— 装饰模式
  9. html5的canvas动画,Canvas HTML5简介 · Canvas动画教程
  10. 矩池云使用VNC Viewer远程连接GPU主机,图形用户界面操作
  11. 上周热点回顾(8.26-9.1)
  12. android4.0.3校准屏幕和隐藏statusbar
  13. 社团管理系统数据流图_实例6:社团管理系统数据库设计
  14. 常见Web安全问题及防御策略
  15. 基于OXC的光电联动全光网组网方案研究与实践
  16. 编程语言【JAVA】编程(4)---摇色子
  17. 【数据结构与算法】之深入解析“1比特与2比特字符”的求解思路与算法示例
  18. 高博课程编程作业之计算小萝卜的坐标
  19. 硬盘提示设备未就绪要如何办啊
  20. 亚商投资顾问早餐FM/0119阿兹夫定正式纳入医保

热门文章

  1. Jmeter测试普通java类说明
  2. winfrom 点击按钮button弹框显示颜色集
  3. 如何构建ASP.NET MVC4JQueryAJaxJSon示例
  4. eclipse常用的快捷键
  5. s:iterator标签的使用
  6. Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...
  7. Oracle加密解密
  8. golang 编写的在线redis 内存分析工具 rma4go
  9. Python 模块 timedatetime
  10. 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)