2015年1月29日 星期四

TIOJ 1210 圖論 之 簡單圖測試

#include <cstdio>
#include <cstdlib>
#include <algorithm>
int main(){
    int degree[10005];
    int n;
    bool ans;
    int num;
    while(1){
        scanf("%d", &n);
        if(n == 0){ break; }

        for (int i = 0; i < n; ++i)
            scanf("%d", &degree[i]);

        ans = true;
        std::sort(degree, degree+n);
        num = 0;
        while(1){
            if(degree[n-1] >= n)
                ans = false;
            if(degree[n-1] == 0 || ans == false)
                break;

            for (int i = n-2; i >= n-1-degree[n-1]; --i){
                if(degree[i] == 0){
                    ans = false;
                    break;
                }
                degree[i]--;
            }

            degree[n-1] = 0; 
            std::swap(degree[num], degree[n-1]);
            num++;
            std::sort(degree+num, degree+n);
        }

        printf("%s\n", ans ? "Yes":"No");
    }
}

沒有留言:

張貼留言