MDeath-Kid

- M I T & Y
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

POJ 1659

Posted on 2011-06-07 21:34  MDeath-Kid  阅读(221)  评论(0编辑  收藏  举报
题目大意是有每个点的初度构造一个图,这个图不唯一。
1659
/*8736366 MDK 1659 Accepted 696K 0MS G++ 2288B 2011-06-07 19:31:53
*/
struct frog
{
int va,station;
};
int cmp(const void *a,const void *b)
{
return (*(frog *)a).va > (*(frog *)b).va ? -1:1;
}
int main()
{
int T;SCF(T);
int mat[MAXN][MAXN];
frog fgp[MAXN];
while(T--)
{
SET(mat,
0);memset(fgp,0,sizeof(struct frog)*MAXN);
int n,d,sta;SCF(n);
F(i,n) fgp[i].station
=i,SCF(fgp[i].va);bool flag =0;
qsort(fgp,n,
sizeof(fgp[0]),cmp);
//F(i,n) DB(fgp[i].station<<"--"<<fgp[i].va);
//DB("---");
F(i,n)
{
d
=fgp[0].va;fgp[0].va=0;
sta
=fgp[0].station;
//F(i,n) DB(fgp[i].station<<"--"<<fgp[i].va);
if(d==0) break;
FOR(j,
1,d)
{
fgp[j].va
--;
if(fgp[j].va<0) {flag=1;break;}
else mat[sta][fgp[j].station]=mat[fgp[j].station][sta]=1;
//PP(n,n,mat);
}
if(flag) break;
else
{
qsort(fgp,n,
sizeof(fgp[0]),cmp);
}
//DB("____");
}
if(!flag)
{
printf(
"YES\n");
F(i,n)
{
F(j,n)
{
printf(
"%d",mat[i][j]);
if(j!=n-1) printf(" ");
}
printf(
"\n");
}
}
else
printf(
"NO\n");
if(T) printf("\n");
}
}

这里有个Haval-Hakimi定理。

memset初始化结构体:memset(&stTest,0,sizeof(struct sample_struct));挺方便。