您的位置:首页 > 产品设计 > UI/UE

hdu 2454 Degree Sequence of Graph G

2013-05-01 00:51 555 查看
Problem - 2454

  模拟,利用图的性质,将当前度数最大的点(假设度数为d(x))删除的同时,把紧接着的前d(x)大的度数分别减一。如果最终可以全部相消,那么就是一个简单图,否则不是。

View Code

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>

#define REP(i, n) for (int i = 0; i < (n); i++)
using namespace std;

multiset<int> cnt;
stack<int> tmp;

int main() {
int T, n, x;
cin >> T;
while (T-- && cin >> n) {
int sum = 0;
cnt.clear();
REP(i, n) {
cin >> x;
if (x) cnt.insert(x);
sum += x;
}
if ((sum & 1) || *cnt.rbegin() >= n) {
puts("no");
} else {
while (true) {
if (cnt.size() == 0) {
puts("yes");
break;
}
if (cnt.size() == 1) {
puts("no");
break;
}
int mx = *cnt.rbegin();
cnt.erase(cnt.find(mx));
if (mx > cnt.size()) {
puts("no");
break;
}
int t;
while (!tmp.empty()) tmp.pop();
REP(i, mx) {
t = *cnt.rbegin();
if (t > 1) tmp.push(t - 1);
cnt.erase(cnt.find(t));
}
while (!tmp.empty()) {
cnt.insert(tmp.top());
tmp.pop();
}
}
}
}
return 0;
}


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