UVA 10720 Graph Construction
2011-09-28 20:36
246 查看
UVA_10720
这个题目做的时候有点贪心的味道,就是如果一个点的度很多的话,那么它应该优先和度比较多的点连成边。
一开始估算了下qsort的时间,觉得麻烦了,但后来老大说他之前就是用qsort过的,于是我便才开始写起qsort来。可能是因为剪枝用的比较得当或者题目的数据比较少才不致以超时吧。
这个题目做的时候有点贪心的味道,就是如果一个点的度很多的话,那么它应该优先和度比较多的点连成边。
一开始估算了下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 ); if(a ) { if(a >max) max=a ; sum+=a ; 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; }
相关文章推荐
- UVA 10720 Graph Construction
- UVa 10720 - Graph Construction(Havel-Hakimi定理)
- UVa10720 - Graph Construction
- UVA10720- Graph Construction
- uva10720(Graph Construction)贪心+havel定理
- uva 10720
- uva10720 - Graph Construction(图重建)
- uva 10720(贪心)
- UVa:10720 Graph Construction
- UVA 10720
- Havel-Hakimi定理(判断一个序列是否可图) UVA 10720
- UVA 10720 Graph Construction 贪心+优先队列
- uva10720 Graph Construction
- UVa 10720 - Graph Construction
- uva10720 - Graph Construction(Havel-Hakimi定理)
- uva 10720 可图化序列
- uva 10720 Graph Construction
- uva10720 - Graph Construction(简单图的判定)
- uva 10720 Graph Construction
- uva 10720 Graph Construction