poj 1659 构造

来源:互联网 发布:苏州110网络报警平台 编辑:程序博客网 时间:2024/06/11 22:13

思路可以参考上一篇,比那个简单多了。或者自己搜Havel-Hakimi定理。

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;struct node{    int num,cnt;}p[111];int n,m;bool l[111][111];bool cmp(node x,node y){return x.cnt>y.cnt;}void solve(){    m=0;    for(int i=0;i<n;i++)    {        sort(p+i,p+n,cmp);        int u=p[i].num;        for(int j=i+1;j<n;j++)        {            int v=p[j].num;            if(p[i].cnt&&p[j].cnt)            {                p[i].cnt--;p[j].cnt--;                l[u][v]=l[v][u]=1;                m++;            }            else break;        }        if(p[i].cnt)        {            printf("NO\n");            return;        }    }    printf("YES\n");    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            if(l[i][j])printf("1");            else printf("0");            if(j!=n)printf(" ");        }        printf("\n");    }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        memset(l,0,sizeof(l));        for(int i=0;i<n;i++){scanf("%d",&p[i].cnt);p[i].num=i+1;}        solve();        if(t)printf("\n");    }    return 0;}


0 0