poj1659 Frogs' Neighborhood

给n个点,以及每个点的度,求一个可以满足的图。

额正解那个算法没有细看,感觉差不多的。

简单想想,分析一下样例就可以判断出无解的条件,

将点按度数从大到小排序,从大的开始处理,依次与后面点相连,

如果连到后面点的度数已经是0了,或者到最后一个点了这个点还没有连完则无解。

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;

struct node
{
    int w,id;
}s[15];
int vis[15][15];

bool cmp(node a,node b)
{
    return a.w>b.w;
}

int main()
{
    int T,p,i,j,n,cnt,flag;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        cnt=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&s[i].w);
            s[i].id=i;
            cnt+=s[i].w;
        }
        if(cnt&1)
        {
            printf("NO\n");
            continue;
        }
        memset(vis,0,sizeof vis);
        flag=1;
        while(1)
        {
            sort(s,s+n,cmp);
            if(s[0].w==0) break;
            cnt=0;i=1;
            while(1)
            {
                if(i==n)
                {
                    flag=0;
                    break;
                }
                if(vis[s[i].id][s[0].id])
                {
                    i++;
                    continue;
                }
                if(s[i].w==0)
                {
                    flag=0;
                    break;
                }
                vis[s[i].id][s[0].id]=vis[s[0].id][s[i].id]=1;
                s[i].w--;
                cnt++;
                if(cnt==s[0].w) break;
                i++;
            }
            if(!flag) break;
            s[0].w=0;
        }
        if(!flag)
            printf("NO\n");
        else
        {
            printf("YES\n");
            for(i=0;i<n;i++)
            {
                for(j=0;j<n-1;j++)
                    printf("%d ",vis[i][j]);
                printf("%d\n",vis[i][j]);
            }
        }
        if(T) puts("");
    }
    return 0;
}

poj1659 Frogs' Neighborhood,布布扣,bubuko.com

poj1659 Frogs' Neighborhood

时间: 2024-10-11 10:04:19

poj1659 Frogs' Neighborhood的相关文章

POJ1659 Frogs&#39; Neighborhood(Havel定理)

给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化.简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边,然后这个点就可以不

POJ 题目1659 Frogs&#39; Neighborhood(度数还原无向图)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8348   Accepted: 3538   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

poj 1659 Frogs&#39; Neighborhood

#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <ma

POJ 1659:Frogs&#39; Neighborhood(Havel-Hakimi定理)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6898   Accepted: 3006   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

poj 1659 Frogs&#39; Neighborhood (构图)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 7237   Accepted: 3123   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

POJ 1659 A - Frogs&#39; Neighborhood

A - Frogs' Neighborhood Time Limit:5000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..., x

POJ 1659 Frogs&#39; Neighborhood (贪心)

题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring>

POJ Frogs&#39; Neighborhood havel-hakimi定理 (简单题)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8263   Accepted: 3504   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

POJ 1659 Frogs&#39; Neighborhood(度序列构图)

题意  中文 根据Havel-Hakimi定理构图就行咯  先把顶点按度数从大到小排序  可图的话  度数大的顶点与它后面的度数个顶点相连肯定是满足的  出现了-1就说明不可图了 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 20; int mat[N][N], ord[N]; bool cmp(int i, int j) { retur