时间:2021-05-19
做题思路:
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;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
吉他调音方法如下: 首先下载一个吉他调音工具的app,然后根据app上的指示按个弹弦,从六弦到一弦是mi,la,re,sol,si,mi,也就是,调音器上显示
。的双曲馀弦值。的双曲馀弦值。67.81KB,下载次数:5)。。下载附件。。2019-9-2514:09上传。的双曲馀弦值。的双曲馀弦值。。。。3c鼠标垫品类的
本文实例讲述了ASP.Net页面生成饼图的方法。分享给大家供大家参考。具体实现方法如下:1.生成普通饼图:复制代码代码如下:usingSystem;usingS
画弦方法英文命令:chord 操作系统支持:Windows所属对象:画板语法:无返回值画板.画弦(椭圆左上角横坐标,椭圆左上角纵坐标,椭圆右下角横坐标,椭圆右下
本文实例讲述了asp.net实现C#绘制太极图的方法。分享给大家供大家参考。具体如下:成品图如下所示:html页面:注意设置:复制代码代码如下:ContentT