弦图ZOJ 1015 Fishing Net 判定方法

做题思路
1 弦图,看了一个周末有木有!太弱了点,算法完全按照CDQ的PPT上给的最大势算法(MCS)求完美消除序列。前前后后sumbit了19次,为WA提供了大量分母啊。。。。 多写点为自己备份吧。
2 有用的资料: 
3 定理:一个图是弦图当且仅当它有一个完美消除序列。所以要先搞到完美消除序列:

4 如何判断搞到的是不是完美消除序列:


贴代码:(V*V的复杂度。。。)


代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000+10;
int gra[maxn][maxn];
int n, m;
int label[maxn], temp[maxn], num[maxn];
void numberVertex()
{
int i, j;
//label[n]=0, num[n]=1;
for(i=n; i>=1; i--)
{
int mm=-1, pos;
for(j=1; j<=n; j++)
{
if( !num[j] && label[j]>mm)
{
mm=label[j];
pos=j;
}
}
num[pos]=i;
for(j=1; j<=n; j++)
{
if( !num[j] && ( gra[pos][j] || gra[j][pos] ) )
label[j]++;
}
}
return ;
}
int check()
{
int i, j, flag=1;
for(i=1; i<=n && flag; i++)
{
memset(temp,0,sizeof(temp));
int len=0;
for(j=1; j<=n; j++)
{
if( num[i]<num[j] && gra[ i ][ j ] )
{
temp[len++]=j;
}
}
for(j=1; j<len; j++)//在此WA了一天有木有。。。
if(num[ temp[0] ]>num[ temp[j] ])
swap(temp[0], temp[j]);
for(j=1; j<len; j++)
if( !gra[ temp[0] ][ temp[j] ] )
{
flag=0;
break;
}
}
return flag;
}
int main()
{
while( scanf("%d %d",&n,&m)!=EOF )
{
if(n==0 && m==0)
break;
memset(label,0,sizeof(label));
memset(num,0,sizeof(num));
memset(gra,0,sizeof(gra));
for(int i=0; i<m; i++)
{
int x, y;
scanf("%d %d",&x, &y);
gra[x][y]=gra[y][x]=1;
}
numberVertex();
if( check() )
puts("Perfect\n");
else
puts("Imperfect\n");
}
return 0;
}

(0)

相关推荐

  • 弦图ZOJ 1015 Fishing Net 判定方法

    做题思路: 1 弦图,看了一个周末有木有!太弱了点,算法完全按照CDQ的PPT上给的最大势算法(MCS)求完美消除序列.前前后后sumbit了19次,为WA提供了大量分母啊.... 多写点为自己备份吧. 2 有用的资料:  3 定理:一个图是弦图当且仅当它有一个完美消除序列.所以要先搞到完美消除序列: 4 如何判断搞到的是不是完美消除序列: 贴代码:(V*V的复杂度...) 复制代码 代码如下: #include <iostream> #include <cstdio> #incl

  • 前端开发过程中浏览器版本的两种判定方法

    在网上查找浏览器及版本判定方法有好多,此处小弟总结一二,以节省大家时间. 1.jquery的方法: 通过正则表达式可判定常用浏览器及其版本. 复制代码 代码如下: <span style="font-size:12px">function allinfo(){ var ua = navigator.userAgent; ua = ua.toLowerCase(); var match = /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera

  • thinkphp关于简单的权限判定方法

    实例如下: <li> <label>权限</label> <cite> <input name="MB_right" type="radio" value="1" checked="checked">超级管理员 <input name="MB_right" type="radio" value="0"&

  • flutter 轮播图动态加载网络图片的方法

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费.开源的. Swiper,网上很多例子只是加载固定的几张图,并且页面只有一个轮播图,在实际应用中,可能会遇到类似ins这种,加载列表,并且都是多图模式的情况. 需要添加依赖包 flukit: ^1.0.0 引用 import 'package:flukit/flukit.da

  • 快速使用IDEA图形化界面连接Phoenix的方法

    一.下载连接驱动 ★官方下载地址 注:下载自己服务的对应版本jar 1.将下载到的jar包解压,找到连接驱动 Thick:phoenix-5.0.0-HBase-2.0-client.jar Tink:phoenix-5.0.0-HBase-2.0-thin-client.jar 二.配置idea 1.新建驱动(以Thick连接方式为例) thick-url:jdbc:phoenix:hadoop102,hadoop103,hadoop104:2181thin-url:jdbc:phoenix:

  • Python教程使用Chord包实现炫彩弦图示例

    首先来介绍一下什么是弦图? 弦图主要用于展示多个对象之间的关系,连接圆上任意两点的线段叫做弦,弦(两点之间的连线)就代表着两者之间的关联关系. 弦图虽然看起来有点眼花缭乱,但是它却非常适合用户分析复杂数据的关联关系. Python中能够绘制弦图的包有一些,本篇主要介绍如何使用chord库来制作酷炫的弦图.可以查看官方文档. 在使用前需要用pip安装: pip install chord 在官方文档中很清晰地罗列了API的使用说明,API分为free和pro两个版本,其中pro版本在free的基础

  • 利用Matlab绘制好看的弦图

    目录 封面图 使用教程 1.数据格式 2.修饰弦 3.圆弧状方块修饰 4.字体调整 5.显示和隐藏刻度 工具函数完整代码 封面图绘制代码 封面一 封面二 弦图在python中以及R中非常常见,但是MATLAB中却始终没有相关函数,file exchange中也没有工作做的较为完备的弦图绘制函数(不过现在有了,我已经往上面也传了一份hiahiahia) 仅工具函数主体部分约300行,字符数约8000,能画出与R语言同等质量的弦图实属不易,希望能有个`点赞``!!! 由于工具函数过长,将被放在最后展

  • C++两种素数判定方法

    目录 1.什么是素数 2.素数的两种判断方法 (1)暴力法 从 2 到 √n 6n-1与6n+1 (2)筛法 埃氏筛 欧拉筛 1.什么是素数 素数又称质数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数:否则称为合数(规定1既不是素数也不是合数). 在许多的程序设计题目中,都会涉及到素数的判断,那我们该如何有效判断素数呢? 2.素数的两种判断方法 (1)暴力法 从 2 到 √n 根据素数的定义,我们可以使用逐个试除的方式来判断素数,如果能为要判断的数找到一个除了1和自身以

  • JS实现轮播图效果的3种简单方法

    本文实例为大家分享了3种方法实现JS轮播图效果的具体代码,供大家参考,具体内容如下 Js实现轮播图01 实现思路 这可能是轮播图最简单点的实现之一,通过更改图片的src来实现该效果,首先需要将图片命名格式统一比如pic01.jpg,pic02.jpg-,再通过js使用定时器去改变img标签里面的src图片链接的名字来实现切换效果.代码如下: 实现效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q

  • 小程序多图列表实现性能优化的方法步骤

    写这篇文章的缘由: 最近在公司的小程序项目中遇到了页面图片元素过多导致的性能问题. 从小程序提供的性能检测面板分析, 确定是图片元素占用了过多内存导致. 因为本人之前主要是做桌面端应用开发和原生app开发, 没有太顾及过移动端图片的内存占用问题. 这次既然遇到了, 也就趁这个机会学习一下其优化的技巧. 什么造成的性能问题 简单的来说: DOM节点过多 && 图片节点过多 DOM节点过多会造成更多的内存占用. 按照目前的微信小程序限制, 内存占用500M以上会出现卡顿, 甚至闪退. 如果列表

随机推荐