UVa:10720 Graph Construction

懂了Havel-Hakimi定理这个题就easy多了。。

 

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int n;
    while(scanf("%d",&n)&&n)
    {
        int vert[10005];
        for(int i=1; i<=n; ++i)
            scanf("%d",&vert[i]);
        int pos=1;
        sort(vert+1,vert+n+1,cmp);
        bool ok=true;
        while(vert[pos]&&ok)
        {
            if(vert[pos]>n-pos)
            {
                ok=false;
                break;
            }
            else
            {
                for(int i=1; i<=vert[pos]&&ok; ++i)
                {
                    vert[pos+i]--;
                    if(vert[pos+i]<0)
                    {
                        ok=false;
                        break;
                    }
                }
                pos++;
                if(ok) sort(vert+pos,vert+n+1,cmp);
            }
        }
        if(!ok)
           puts("Not possible");
        else
          puts("Possible");
    }
    return 0;
}


 

你可能感兴趣的:(图论,Havel-Hakimi定理)