페이지

1516번: 게임 개발

https://www.acmicpc.net/problem/1516


#include<stdio.h>
bool ok;
int n, time[510], data, need[510][510], cnt[510], check[510], ans[510], anscnt, min;
int main()
{
    int i, j;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        scanf("%d", &time[i]);
        do
        {
            scanf("%d", &data);
            if (data != -1)
            {
                need[i][++cnt[i]] = data;
            }
        } while (data != -1);
    }
    do
    {
        int go[510] = { 0, }, gocnt = 0;
        min = 2147483647;
        for (i = 1; i <= n; i++)
        {
            ok = true;
            for (j = 1; j <= cnt[i]; j++)
            {
                if (check[need[i][j]] == 0)
                {
                    ok = false;
                }
            }
            if (ok&&check[i] == 0)
            {
                go[++gocnt] = i;
                if (time[i]<min)
                {
                    min = time[i];
                }
            }
        }
        for (i = 1; i <= n; i++)
        {
            if (check[i] == 0)
            {
                ans[i] += min;
            }
        }
        for (i = 1; i <= gocnt; i++)
        {
            time[go[i]] -= min;
            if (time[go[i]] == 0)
            {
                anscnt++;
                check[go[i]] = 1;
            }
        }
    } while (anscnt<n);
    for (i = 1; i <= n; i++)
    {
        printf("%d\n", ans[i]);
    }
    return 0;
}

댓글 없음 :

댓글 쓰기