UVA 10720

来源:互联网 发布:知否小说全文免费阅读 编辑:程序博客网 时间:2024/05/20 01:38

  题目大意是给定n个顶点的度,Havel-Hakimi判断有没有可能构成一个图。贪心法,每次选择当前集合中度最大的顶点,假设其度为k,那么我们尽可能和其之后度前k大的节点相连,若为0,则不可能,但没想到这还是一个名字听起来特别高端的定理,Havel-Hakimi定理。注意剪枝,并且这里有一个让本人wa了n次的概念性问题就是,简单图可以使不连通的。

#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int d[10010];bool cmp(int a,int b){return a>b;}int main(){int n;while(cin>>n&&n){int sum=0;bool mark=true;for(int i=0;i<n;i++) {cin>>d[i];sum+=d[i];if(d[i]>=n) mark=false;}if((sum&1)||sum>(n*(n-1))||!mark) {printf("Not possible\n");continue;}// 加上||sum<((n-1)<<1)则WAfor(int i=0;i<n;i++){ sort(d+i,d+n,cmp);if(!d[i]) break;int t=d[i];for(int j=i+1;j<n&&t;j++){if(!d[j]) break;d[j]--;t--;}if(t) {mark=false;break;}}if(!mark) printf("Not possible\n");else printf("Possible\n");}return 0;}


 

 

0 0