#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; }
1516번: 게임 개발
https://www.acmicpc.net/problem/1516
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기