题目大意:
知道各个节点的度,判断该图是否为简单图。
思路:
本来想说奇数度的节点偶数个就可以保证这是个简单图,可以是错的。应该找出度数最大(M)的点,让后面的M个点度数–,如果有出现<0的那么必然就不能构成简单图。
代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#include <algorithm>
int node[10003];
/*int cmp(int &a,int &b) { return a > b ; }*/
int main() {
int N,_max,i,j;
while(scanf("%d",&N) && N) {
_max = 0;
memset(node,0,sizeof(node)); //少了这句就WA了
for( i = 0 ; i < N; i++) {
scanf("%d",&node[i]);
}
for(i = 0; i < N; i++) {
sort(node + i,node+N,greater<int>());
// for( i = 0 ; i < N; i++) {
if(node[i] > N- i - 1)
break;
for(j = i + 1 ; j < i+1+ node[i]; j++) {
node[j]--;
if(node[j] < 0)
break;
}
if(node[j] < 0)
break;
node[i] = 0;
}
if(i == N)
printf("Possible\n");
else
printf("Not possible\n");
}
return 0;
}