您的位置:首页 > 其它

uva10720

2014-09-14 00:43 316 查看
题目的意思就是给你n个点,然后给出每个点的度数,问能不能构成图;

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

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 10000 + 5;
int g
;
int num;

int cmp (int a ,int b) {
return a > b;
}
bool yes(int pos) {
for (int i = pos ; i < num; i++) {
if (g[i] < 0)
return false;
}
return true;
}
int main () {
bool ok;
while (cin >> num && num) {
ok = true;
for (int i = 0 ;i < num ; i++) {
cin >> g[i];
}
for (int i = 0 ; i < num - 1 ; i++) {
sort (g + i , g + num ,cmp);
if (num - i <= g[i]) {
ok = false;
break;
}
for (int j = i + 1 ; j <= i + g[i] ;j++) {
g[j]--;
}
if (!yes(i + 1)) {
ok = false;
break;
}
}
if (g[num - 1] != 0)
ok = false;
if (ok)
cout << "Possible\n";
else
cout << "Not possible\n";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: