弦图ZOJ 1015 Fishing Net 判定方法

2016-02-19 11:51 24 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享弦图ZOJ 1015 Fishing Net 判定方法的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
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; jlen; j++)//在此WA了一天有木有。。。
if(num[ temp[0] ]num[ temp[j] ])
swap(temp[0], temp[j]);
for(j=1; jlen; 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; im; i++)
{
int x, y;
scanf("%d %d",&x, &y);
gra[x][y]=gra[y][x]=1;
}
numberVertex();
if( check() )
puts("Perfectn");
else
puts("Imperfectn");
}
return 0;
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1598860.html

延伸阅读
译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解。 作者:Mark Strawmyer 我们将研究如何创建一个作为Windows服务的应用程序。内容包含什么是Windows服务,如何创建、安装和调试它们。会用到System.ServiceProcess.ServiceBase命名空间的类。 ...
经验分享 图钉问: 如何判定甘油三酯是否偏高? 图老师答: 理想的甘油三酯水平应低于1.70mmol/L,超过1.70mmol/L则需要改变生活方式,控制饮食,增加运动,高于2.26mmol则表示甘油三酯偏高,特别是针对已明确患有冠心病、高血压或糖尿病的病人来说,高于2.26mmol/L则意味已经进入心血管事件发生的高危状态了,患者需要加大运动量...
如何帮助孩子 找到合适的朋友 在孩子的成长道路上,朋友是不可或缺的一环。作为家长,怎样帮孩子找到合适的朋友呢?儿童专栏作家夏洛特拉提委拉指出,孩子至少需要5类朋友。 1.就近找的朋友 什么年龄最好:5岁以前 到哪里找:观察邻居的孩子,如果妈妈面貌可亲,孩子通常也不错。 这个朋友的作用:这第一个伴儿可...
标签: 女性健康
假如在成人的食指上看到青筋,说明小时候消化功能不好,而且这种状态已一直延续到了成年后。这类人体质弱,气血两亏。假如在小指上看到青筋,说明肾气不足。假如掌心下方接近腕横纹的地方纹路多、深,就代表小时候营养差,体质弱,气血不足。 怎么判定女人是否应该补血? 怎么判定女人是否应该补血? 女人气血是否充足,...
标签: 手纹算命图解
骨相学:两弦明月骨(上弦明月骨和下弦明月骨)的骨相图解。两弦明月骨,变上为仰月,即月之上弦也,变下为覆月,即月之下弦也,在后脑海之间,平齐耳廓横过。 骨相图解:上弦明月骨 骨相图解:下弦明月骨 两弦明月骨,变上为仰月,即月之上弦也,变下为覆月,即月之下弦也,在后脑海之间,平齐耳廓横过。 查上弦仰...

经验教程

561

收藏

41
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部