题意
给你一个度序列,问能否构成一个简单图。
分析
对于可图化,只要满足度数之和是偶数,即满足握手定理。
对于可简单图化,就是Heavel定理了。
Heavel定理:把度序列排成不增序,即 $deg[1] geq deg[2] geq ... geq deg[V]$,则 $deg$ 可简单图化当且仅当 ${deg}' = {deg[2]-1, deg[3]-1,...,deg[deg[1]+1]-1,...,deg[v] }$ 可简单图化。
简单地说,把 $deg$ 从大到小排序后,找出度最大的点(设度为$d$),将它与度次大的 $d$ 的点连边,然后这个点就可以不管了。一直重复这个过程,直到用完所有的点。如果中间出现负度或剩下节点数小于当前节点的度数,则说明不可简单图化。(其实还是在运用握手定理)
#include<bits/stdc++.h> using namespace std; const int maxn = 1000 + 10; int n, a[maxn]; int main() { int T; scanf("%d", &T); while(T--) { scanf("%d", &n); for(int i = 0;i < n;i++) scanf("%d", &a[i]); bool flag = false; for(int i = 0;i < n;i++) { sort(a+i, a+n, greater<int>()); if(a[i] < 0 || a[i] > n-1-i) { flag = true; break; } for(int j = 1;j <= a[i];j++) a[i+j]--; } if(flag) printf("no "); else printf("yes "); } return 0; }
参考链接:
1. https://blog.csdn.net/Yasola/article/details/77862481
2. https://blog.csdn.net/shuangde800/article/details/7857246