PKU 1659 Frogs' Neighborhood - 贪心 Havel定理

题目大意

给出一个无向图的顶点度序列{dn},要求判断能否构造出一个简单无向图。若能构造任意一个输出邻接矩阵。

分析

今年哈尔滨赛区也出了一个一样的题目,而且只要求判定不需要构造。当时我们是用贪心做的,只是到最后也不知道为什么是正确的……

贪心的方法是每次把顶点按度大小从大到小排序取出度最大的点Vi,依次和度较大的那些顶点Vj连接,同时减去Vj的度。连接完之后就不再考虑Vi了,剩下的点再次排序然后找度最大的去连接……这样就可以构造出一个可行解。

判断无解有两个地方,若某次选出的Vi的度比剩下的顶点还多,则无解;若某次Vj的度减成了负数,则无解

至于什么是Havel定理,上面这个构造过程就是了^^

详细可以参考这里http://roba.yo2.cn/archives/439802

  1. /*
  2. PKU1659 Frogs' Neighborhood
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <memory.h>
  7. #define clr(a) memset(a,0,sizeof(a))
  8. #define N 15
  9. int d[N],idx[N];
  10. int cmp(const void *a,const void *b){
  11.     return d[*(int*)b] - d[*(int*)a];
  12. }
  13. int main()
  14. {
  15.     int i,j,k,r,n,T;
  16.     int a[N][N],flag;
  17.     
  18.     scanf("%d",&T);
  19.     while(T--){
  20.         scanf("%d",&n);
  21.         for(i=0;i<n;i++){ scanf("%d",&d[i]); idx[i]=i; }
  22.         clr(a);
  23.         flag=1;
  24.         //work
  25.         for(k=0;k<n&&flag;k++){
  26.             qsort(idx+k,n-k,sizeof(int),cmp);
  27.             i=idx[k];
  28.             if(d[i]>n-k-1) flag=0;
  29.             for(r=1;r<=d[i]&&flag;r++){
  30.                 j=idx[k+r];
  31.                 if(d[j]<=0) flag=0;
  32.                 d[j]--;
  33.                 a[i][j]=a[j][i]=1;
  34.             }
  35.         }
  36.         //output
  37.         if(flag){
  38.             puts("YES");
  39.             for(i=0;i<n;i++){
  40.                 for(j=0;j<n;j++){
  41.                     if(j) printf(" ");
  42.                     printf("%d",a[i][j]);
  43.                 }
  44.                 puts("");
  45.             }
  46.         }
  47.         else puts("NO");
  48.         if(T) puts("");
  49.     }
  50.     
  51.     return 0;
  52. }

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值