现在的位置: 首页 > 综合 > 正文

UVA 10720 Graph Construction

2013年05月08日 ⁄ 综合 ⁄ 共 837字 ⁄ 字号 评论关闭

UVA_10720

这个题目做的时候有点贪心的味道,就是如果一个点的度很多的话,那么它应该优先和度比较多的点连成边。

一开始估算了下qsort的时间,觉得麻烦了,但后来老大说他之前就是用qsort过的,于是我便才开始写起qsort来。可能是因为剪枝用的比较得当或者题目的数据比较少才不致以超时吧。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[10010],n,N,sum;
int cmp(const void *_p,const void *_q)
{
int *p=(int *)_p;
int *q=(int *)_q;
return *p-*q;
}
int judge()
{
int i,j,k,t;
qsort(a,n,sizeof(a[0]),cmp);
for(k=n-1;k>0;k--)
if(a[k])
{
for(i=k-1;i>=0;i--)
if(a[i])
{
a[i]--;
a[k]--;
sum-=2;
if(!a[k])
break;
}
if(a[k])
break;
qsort(a,k,sizeof(a[0]),cmp);
}
if(sum==0)
return 1;
else
return 0;
}
int main()
{
int i,j,k,max;
while(1)
{
scanf("%d",&N);
if(N==0)
break;
n=max=sum=0;
for(i=0;i<N;i++)
{
scanf("%d",&a[n]);
if(a[n])
{
if(a[n]>max)
max=a[n];
sum+=a[n];
n++;
}
}
if(sum==0)
{
printf("Possible\n");
continue;
}
else if(max>=n||sum%2!=0)
{
printf("Not possible\n");
continue;
}
if(judge())
printf("Possible\n");
else
printf("Not possible\n");
}
return 0;
}


抱歉!评论已关闭.