1242: Zju1015 Fishing Net弦图判定

Time Limit: 10 Sec  Memory Limit: 162 MB
[Submit][Status][Discuss]

Description

在一个高度信息化的渔村,鱼网的制作和修补都是由电脑完成。众所周知,鱼网是由网组成的(废话),网组成的东西叫网眼。如果网眼够小,就能捕到很多鱼;如果网眼太大,鱼就会全部漏走。每次捕鱼回来,鱼网都会烂得很厉害,小网眼会变成网眼,那鱼网就需要修补。他们希望有一个程序能够为他们判断鱼网是否需要修补。程序会把鱼网看作一个联通的图(不用进一步解释了吧)。他们的判断方法是:任何一个长度(组成其的边的数目)超过3的闭合的圈,都必须有一条交线将它分作两部分。(提示:递归下去,其实就是每个网眼都只能是三角形)如果合乎要求,程序就输出“Perfect",否则输出"Imperfect". 注:这里的交线是指一个联结一封闭圈的不同结点而捕属于该圈的一条边。

Input

数据以一行N M开始,表示鱼网有N个结点和M条边。(n<=0<=1000)以下M行是M条边的描述。每行两个整数A,B,表示结点A与结点B之间存在一条边。

Output

输出每个鱼网的测试结果,Perfect或Imperfect

Sample Input

4 4
1 2
2 3
3 4
4 1

Sample Output

Imperfect
弦图判定  MCS算法
以下均摘自CDQ WC2009讲稿《弦图与区间图》
https://wenku.baidu.com/view/07f4be196c175f0e7cd13784.html
几个定义:
团:完全图
单纯点:若点v 和 v的相邻点的集合构成的诱导子图为一个团,则v为单纯点
完美消除序列:一个点的序列{v1,v2,v3……vn} 满足vi在{vi,vi+1……vn}的诱导子图中为一个单纯点
弦:连接环中不相邻的点的边
弦图:图中任意长度>3的环都至少有一个弦
弦图判定定理:一个图为弦图当且仅当它有一个完美消除序列
MCS(最大势算法):
从n到1的顺序依次给每个点编号,编号为i的点出现在完美消除序列的第i个
设label[i]表示第i个点与多少个已标号的点相邻,每次选择label[i]最大的未标号点编号
根据编号得到一个点的序列
若此序列为完美消除序列,则图为弦图
判断序列为完美消除序列:
暴力法:O(m*n)
依次判断{v_i+1,v_i+2,……vn}中所有与vi相邻的点是否为一个团
优化算法:O(m+n)
{v_i+1,v_i+2,……v_n} 中 与v_i相邻的点{v_j1,v_j2……v_jk}
只需判断v_j1是否与{v_j2,……j_jk}相邻
#include<cstdio>
#include<iostream>
#define N 1101
using namespace std;
bool con[N][N],vis[N];
int st[N],top;
int rk[N],sa[N],d[N];
int n,m;
int tot,front[N*2],to[N*N*4],nxt[N*N*4];
void read(int &x)
{x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}
void add(int u,int v)
{to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
}
#define f(x) x+n+1
void mcs()
{for(int i=1;i<=n;i++) add(f(0),i);int pos,mx=0;for(int i=n;i;--i){pos=0;for(int j=front[f(mx)] ; j && !pos ; j=nxt[j])if(!vis[to[j]]) {pos=to[j];vis[pos]=true;sa[i]=pos;}else front[f(mx)]=nxt[j];if(!pos) mx--,i++;else{for(int j=front[pos];j;j=nxt[j])if(!vis[to[j]]){d[to[j]]++;add(f(d[to[j]]),to[j]);mx=max(mx,d[to[j]]);}}}
}
int main()
{read(n); read(m);int u,v;for(int i=1;i<=m;++i) {read(u); read(v);add(u,v);add(v,u);con[u][v]=con[v][u]=true;}mcs();for(int i=1;i<=n;++i) rk[sa[i]]=i;rk[0]=n+5;int now;for(int i=n;i;--i){now=sa[i];top=0;for(int j=front[now];j;j=nxt[j])if(rk[to[j]]>i) st[++top]=to[j];for(int j=2;j<=top;j++)if(!con[st[1]][st[j]]){puts("Imperfect");return 0;}}puts("Perfect");
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7464539.html

bzoj 1242 Zju1015 Fishing Net 弦图判定相关推荐

  1. bzoj 1242: Zju1015 Fishing Net 弦图判定

    1242: Zju1015 Fishing Net弦图判定 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 214  Solved: 81 [Subm ...

  2. bzoj1242: Zju1015 Fishing Net弦图判定

    Description 在一个高度信息化的渔村,鱼网的制作和修补都是由电脑完成.众所周知,鱼网是由网组成的(废话),网组成的东西叫网眼.如果网眼够小,就能捕到很多鱼:如果网眼太大,鱼就会全部漏走.每次 ...

  3. ZOJ 1015 弦图判定

    一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 华为鸿蒙新概念机,华为P50概念机确认,麒麟芯片+鸿蒙系统,这才是真旗舰!...
  2. jsp+ajax+servlet+sqlserver实现分页查询_SXT DAY063 分页
  3. c:数据结构-线性表
  4. SQL SERVER 2005 同步复制技术 发布与订阅功能使用说明
  5. java函数的参数传递
  6. 学html css之前,学习CSS前必知HTML基础
  7. hashmap value占用空间大小_如何获取 java hashmap占用存储空间空间大小
  8. 微信小程序头像上传以及剪切(使用插件image-cropper)
  9. sql cast 和convert用法详解
  10. c语言修仙亲吻片段,《C语言修仙》by一十四洲,摘抄
  11. 以Tethering.apk为例看APEX的搭建过程
  12. js继承java方法吗_你知道JavaScript的继承吗?
  13. Zynq-7000 - Which IBIS models should be used for Zynq-7000 devices?
  14. 【软考二】程序设计语言(做题)
  15. C++Primer PLus 第五版读书笔记
  16. 2021/12/14 nginx包下载安装步骤记录
  17. [bzoj3611][Heoi2014]大工程
  18. is not eligible for getting processed by all BeanPostProcessors
  19. [跟进]_淘宝推出搜索引擎
  20. 2022-2028全球预制镶板建筑行业调研及趋势分析报告

热门文章

  1. oracle exadata celldisk 闪存盘受损导致性能下降
  2. kafka:消息阻塞
  3. springboot dubbo负载均衡配置
  4. rust怎么不要的墙拆掉_拆掉防御的墙
  5. 对 FaaS 的基础认识
  6. 我吃“软饭”的那些日子(3)
  7. Phonenix4.9 (添加二级索引,新版本本地索引表变更) hbase1.25的集成测试
  8. 基于ssm的网上银行管理系统的设计与实现
  9. GreenPlum数据库及语法使用
  10. 【转载】OpenCV-Python系列之直方图均衡(三十五)