您的位置:首页 > 其它

pku 1659 (Havel定理)

2010-05-26 14:28 239 查看
Havel定理参考:http://hi.baidu.com/roba/blog/item/0732d01645a9ec1b972b4380.html#send

知道这个定理之后就很简单了,要注意的是每个case之间要空行,否则不给PE而是直接WA。

#include <iostream>
#include <algorithm>
using namespace std;
class point
{
public:
int pos,degree;
};
bool g[15][15];
point seq[15];
int cmp(const point &a,const point &b)
{
return a.degree>b.degree;
}
int main()
{
int cas,n;
bool flag;
cin>>cas;
while(cas--)
{
cin>>n;
flag=true;
memset(g,false,sizeof(g));
for(int i=0;i<n;++i)
{
cin>>seq[i].degree;
seq[i].pos=i;
}
//Havel定理
for(int i=0;i<n;++i)
{
sort(seq,seq+n,cmp);
if(seq[0].degree==0) break;
for(int j=1;j<n;++j)
{
seq[j].degree--;
if(seq[j].degree<0)
{
flag=false;
break;
}
g[seq[0].pos][seq[j].pos]=g[seq[j].pos][seq[0].pos]=true;
seq[0].degree--;
if(seq[0].degree==0) break;
}
if(!flag) break;
}
//solve
if(!flag) cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
if(j) cout<<" ";
cout<<g[i][j];
}
cout<<endl;
}
}
cout<<endl;
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: