Study/Baekjoon

[백준/C++] 1005 ACM Craft

에린_1 2024. 3. 28. 17:27
728x90

1005 ACM Craft

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

 

1005번: ACM Craft

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

www.acmicpc.net

#include<bits/stdc++.h>
using namespace std;

int t,n,k,w;
int main()
{
	cin >> t;
	for (int i = 0; i < t; ++i)
	{
		int time_table[1002];
		int result[1002];
		int indegree[1002] = { 0, };
		vector<int> adj[1002];
		queue<int> q;
		
		cin >> n >> k;
		for (int j = 1; j <= n; ++j)
		{
			cin >> time_table[j];
		}

		for (int j = 0; j < k; ++j)
		{
			int a, b;
			cin >> a >> b;
			adj[a].push_back(b);
			++indegree[b];
		}
		cin >> w;

		for (int j = 1; j <= n; ++j)
		{
			if (indegree[j] == 0)
				q.push(j);
			result[j] = time_table[j];
		}

		while (!q.empty())
		{
			int x = q.front();
			q.pop();
			for (int j = 0; j < adj[x].size(); ++j)
			{
				int y = adj[x][j];
				--indegree[y];
				result[y] = max(result[y], result[x] + time_table[y]);
				if (0 == indegree[y])
					q.push(y);
			}
		}
		cout << result[w] << "\\n";
	}
	return 0;
}
  • 위상정렬 문제
  • w를 건설하기 위해서는 w하위에 연결된 모든 건물이 완료되어야 하기 떄문에, w까지 연결되는 여러 경로 중 소요되는 시간이 최대일 때와 같다.
728x90