弦图ZOJ 1015 Fishing Net 判定方法

 更新时间:2012年11月14日 14:59:49   作者:  
弦图,算法完全按照CDQ的PPT上给的最大势算法(MCS)完美消除序列..需要的朋友可以参考下
做题思路
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;
}

相关文章

  • C++中的重载、覆盖、隐藏介绍

    C++中的重载、覆盖、隐藏介绍

    这篇文章主要介绍了C++中的重载、覆盖、隐藏介绍,需要的朋友可以参考下
    2015-04-04
  • 简单了解设计模式中的装饰者模式及C++版代码实现

    简单了解设计模式中的装饰者模式及C++版代码实现

    这篇文章主要介绍了简单了解设计模式中的装饰者模式及C++版代码实现,ConcreteComponent的引用(指针)也可以达到修饰的功能,需要的朋友可以参考下
    2016-03-03
  • C++实现聊天程序

    C++实现聊天程序

    这篇文章主要为大家详细介绍了C++实现类似QQ聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++ Array容器的显示和隐式实例化详细介绍

    C++ Array容器的显示和隐式实例化详细介绍

    这篇文章主要介绍了C++中Array容器的隐式实例化和显式实例化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • C++ Custom Control控件向父窗体发送对应的消息

    C++ Custom Control控件向父窗体发送对应的消息

    这篇文章主要介绍了C++ Custom Control控件向父窗体发送对应的消息的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++代码实现链队列详解

    C++代码实现链队列详解

    下面小编就为大家分享一篇C++代码实现链队列的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能够给你带来帮助
    2021-09-09
  • C++中唯一三元运算符?:实例详解

    C++中唯一三元运算符?:实例详解

    这篇文章主要给大家介绍了关于C++中唯一三元运算符?:的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 解析C语言中结构体struct的对齐问题

    解析C语言中结构体struct的对齐问题

    这篇文章主要介绍了C语言中结构体struct的对齐问题,作者深入到内存分配方面来进行解析,需要的朋友可以参考下
    2016-04-04
  • 深入浅出理解C语言初识结构体

    深入浅出理解C语言初识结构体

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体
    2022-02-02
  • C++实现LeetCode(160.求两个链表的交点)

    C++实现LeetCode(160.求两个链表的交点)

    这篇文章主要介绍了C++实现LeetCode(160.求两个链表的交点),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论