POJ 1659 Frogs' Neighborhood havel度序列定理的应用
2012-02-29 20:43
302 查看
havel度序列定理就是个贪心,每次先选度数大的点和其他点连一条边
证明画个图就可以了,如果度数最大的那个点没有和度数靠前的点连边的话那么一定可以通过交换边的方式让它和所有度数靠前的点连边,那么就能证明havel定理的转换过程是充要的~
证明画个图就可以了,如果度数最大的那个点没有和度数靠前的点连边的话那么一定可以通过交换边的方式让它和所有度数靠前的点连边,那么就能证明havel定理的转换过程是充要的~
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<map> #include<set> #include<cmath> #include<cassert> #include<cstring> #include<iomanip> using namespace std; #ifdef _WIN32 #define i64 __int64 #define out64 "%I64d\n" #define in64 "%I64d" #else #define i64 long long #define out64 "%lld\n" #define in64 "%lld" #endif #define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++) #define FF(i,a) for( int i = 0 ; i < (a) ; i ++) #define FFD(i,a) for( int i = (a)-1 ; i >= 0 ; i --) #define S64(a) scanf(in64,&a) #define SS(a) scanf("%d",&a) #define LL(a) ((a)<<1) #define RR(a) (((a)<<1)+1) #define SZ(a) ((int)a.size()) #define PP(n,m,a) puts("---");FF(i,n){FF(j,m)cout << a[i][j] << ' ';puts("");} #define pb push_back #define CL(Q) while(!Q.empty())Q.pop() #define MM(name,what) memset(name,what,sizeof(name)) #define read freopen("in.txt","r",stdin) #define write freopen("out.txt","w",stdout) const int inf = 0x3f3f3f3f; const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL; const double oo = 10e9; const double eps = 10e-10; const double pi = acos(-1.0); const int maxn = 13; struct zz { int id; int d; bool operator < (const zz & cmp ) const { return d < cmp.d; } }zx[maxn]; int n,T; int a[maxn][maxn]; void make(int x) { sort(zx+x,zx+n+1); reverse(zx+x,zx+n+1); return ; } bool can() { memset(a,0,sizeof(a)); int from,to; for(int k=1;k<=n;k++) { make(k); from = zx[k].id; for(int i=k+1;i<=n;i++) { to = zx[i].id; if(zx[k].d) { zx[k].d--; if(zx[i].d) { zx[i].d--; a[from][to]++; a[to][from]++; } else { return false; } } else { break; } } if(zx[k].d) { return false; } } return true; } int main() { SS(T); while(T--) { SS(n); FOR(i,1,n) { zx[i].id = i; SS(zx[i].d); } if(can()) { cout<<"YES"<<endl; FOR(i,1,n) { FOR(j,1,n-1) { cout<<a[i][j]<<" "; } cout<<a[i] <<endl; } } else { cout<<"NO"<<endl; } cout<<endl; } return 0; }
相关文章推荐
- poj 1659 Frogs' Neighborhood (判定度序列的可图性) .
- poj 1659 Frogs' Neighborhood(判断序列可图)
- POJ 1659 - Frogs' Neighborhood , Havel_Hakimi 定理
- POJ 1659 Frogs' Neighborhood(度序列构图)
- Havel-Hakimi 度序列判断无向图是否可图 Poj 1659 Frogs' Neighborhood
- poj 1659 Frogs' Neighborhood(Havel定理求度序列是否成图)
- poj 1659 Frogs' Neighborhood(Heal定理)
- POJ 1659 Frogs' Neighborhood(度序列组成)
- poj 1659 Frogs' Neighborhood (度序列)
- poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)
- POJ 1659 Frogs' Neighborhood(Havel_Hakimi定理,图论基础)
- poj 1659 Frogs' Neighborhood (度序列)
- poj 1659 Frogs' Neighborhood 度序列可图化 贪心
- poj 1659 Frogs' Neighborhood (Havel-Hakimi定理,判断序列是否可图)
- poj 1659 Frogs' Neighborhood 度序列可图化 贪心
- poj 1659 Frogs' Neighborhood
- poj 1659 Frogs' Neighborhood havel定理
- POJ-1659 Frogs' Neighborhood
- poj1659 Frogs' Neighborhood 根据度数列构造图,havel_hakimi算法
- POJ1659 Frogs' Neighborhood ACM解题报告(图论基础 邻接矩阵)