uva10720

来源:互联网 发布:蒙特卡洛模拟算法 编辑:程序博客网 时间:2024/05/19 23:58

题目的意思就是给你n个点,然后给出每个点的度数,问能不能构成图;

首先我们把点的度数从大到小排序,然后看看最大的度数是几,假如是k,那如果剩下的没有k个点,就不能构成图,有的话度数大的接下k个点度数都减一,如果有度数变为负数了,那也不能构成。然后除掉第一个点,剩下的排序,重复上面的步骤,到最后一个点,如果度数是0那就对了,不是的话也不能构成图;

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int n;const int maxn = 10005;int arr[maxn];int cmp(int a, int b) {return a>b;}int main() {int i,j;while(scanf("%d", &n)!=EOF && n) {bool flag = false;for(i=0; i<n; i++) {scanf("%d", &arr[i]);}int count=0;for(i=0; i<n; i++) {sort(arr+i,arr+n,cmp);count=0;for(j=i+1; j<n; j++) {if(arr[j]>0) {arr[j]--;count++;}if(count == arr[i]) break;}if(count != arr[i]) {printf("Not possible\n");flag = true;break;}}if(arr[n-1] != 0 && !flag) {printf("Not possible\n");continue;}if(!flag) printf("Possible\n");}return 0;}



0 0