zoukankan      html  css  js  c++  java
  • Poj 1659 Frogs' Neighborhood 图的可图性判断

    /*
      先将所有度数按从大到小排序,取最大的度数为N的节点,将其后面N个节点的度数减一,如果出现负数节点或者后面的节点数量不足N则可以判定无法构成图,重复这个过程,直到所有的度数都为零
    */
    #include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> #include <set> #include <map> #include <vector> #include <queue> #include <stack> #include <cstring> #include <string> using namespace std; const int maxn = 50; int eg[maxn][maxn]; struct pp { int deg,id; bool operator < (const pp &x) const { return deg < x.deg; } }; pp p[maxn]; int main() { int T,N; scanf("%d",&T); for(int kase = 1;kase <= T;kase++) { if(kase > 1) putchar(' '); scanf("%d",&N); memset(eg,0,sizeof(eg)); for(int i = 0;i < N;i++) { scanf("%d",&p[i].deg); p[i].id = i; } int ok = 0; while(1) { int sum = 0; for(int i = 0;i < N;i++) { sum += p[i].deg; } if(ok == -1 || sum == 0) break; sort(p,p + N); int m = p[N - 1].deg + 1; p[N - 1].deg = 0; for(int i = 2;i <= m;i++) { if(N - i < 0) { ok = -1; break; } p[N - i].deg--; if(p[N - i].deg < 0) { ok = -1; break; } else eg[p[N - 1].id][p[N - i].id] = eg[p[N - i].id][p[N - 1].id] = 1; } } if(ok == -1) puts("NO"); else { puts("YES"); for(int i = 0;i < N;i++) { for(int j = 0;j < N;j++) { if(j > 0) putchar(' '); printf("%d",eg[i][j]); } putchar(' '); } } } return 0; }

      

  • 相关阅读:
    第108题:将有序数组转换成二叉搜索树
    第107题:二叉树的层次遍历II
    第106题:从中序与后序遍历序列构造二叉树
    java类读取properties文件
    WdatePicker.js开始日期和结束日期比较
    对两个整数变量的值进行互换
    Java基础知识总结
    jdk环境变量
    逻辑运算符有什么用?
    if和switch的应用
  • 原文地址:https://www.cnblogs.com/rolight/p/3819547.html
Copyright © 2011-2022 走看看