티스토리 뷰

Algorithm/BOJ

[C/C++] 백준 2056번 - 작업

poopooreum 2024. 4. 2. 14:20
반응형

✏️ 문제 링크

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

 

2056번: 작업

수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해

www.acmicpc.net

✏️ 문제 설명

 

✏️ 문제 풀이

위상 정렬로 접근해서 푸는 문제 

일반적인 위상정렬로 구현하고 큐를 탐색하는 과정에서 살짝만 추가하면 문제를 해결할 수 있습니다

작업 시간 배열, 선행 관계 배열, 그리고 정답 출력 배열을 만든 후 큐를 돌리면서

ans[next] = max(ans[next], ans[node] + workTime[node])로 갱신해주시면 됩니다.

정답은 max(ans)

 

✏️ 문제 코드

#include<iostream>
#include<vector>
#include<queue>
#include<limits.h>
using namespace std;

vector<int>workTime;
vector<vector<int>>mlist;
vector<int>indegree;
vector<int>ans;
int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, count, f;
	cin >> N;
	workTime.resize(N + 1);
	mlist.resize(N + 1);
	indegree.resize(N + 1);
	ans.resize(N + 1);

	int c = 0;
	for (int i = 1; i <= N; i++) {
		cin >> workTime[i];
		cin >> count;
		if (count == 0)
			c++;
		for (int j = 0; j < count; j++) {
			cin >> f;
			mlist[f].push_back(i);
			indegree[i]++;
		}
	}

	queue<int>q;
	int sum = 0;
	for (int i = 1; i <= N; i++) {
		if (indegree[i] == 0) {
			q.push(i);
			ans[i] = workTime[i];
		}
	}

	while (!q.empty()) {
		int node = q.front();
		q.pop();
		for (int next : mlist[node]) {
			indegree[next]--;
			ans[next] = max(ans[next], ans[node] + workTime[next]);
			if (indegree[next] == 0)
				q.push(next);
		}
	}

	int max = INT_MIN;
	for (int i = 1; i <= N; i++) {
		if (max < ans[i])
			max = ans[i];
	}
	cout << max;
}

 

 

✏️ 비슷한 문제

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

 

1516번: 게임 개발

첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부

www.acmicpc.net

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

 

1005번: ACM Craft

첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부

www.acmicpc.net

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함