BAEKJOON
BAEKJOON 1005번: ACM Craft
초음속바지벗기
2022. 3. 1. 22:13
728x90
https://www.acmicpc.net/problem/1005
1005번: ACM Craft
첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부
www.acmicpc.net
풀이
D[i]={i번째 건물을 짓는데 걸리는 총 시간}
D를 위와 같이 정의 하면, 마지막으로 짓고 싶은 건물 W에서 시작하여 각 건물에 대해 건물을 짓기 위해 필요한 건물들을 짓는데에 필요한 총 시간 중 최댓값만 가져오면 됩니다.
코드
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
32
|
#include <bits/stdc++.h>
using namespace std;
vector<int>vi[1003];
int D[1003],dp[1003];
int f(int i){
int &ret=dp[i];
if(ret!=-1)return ret;
dp[i]=0;
for(int j=0;j<(int)vi[i].size();j++){
ret=max(ret,f(vi[i][j]));
}
ret+=D[i];
return ret;
}
int main(){
int T;scanf("%d",&T);
while(T--){
memset(dp,-1,sizeof(dp));
int N,K,X,Y,W;
scanf("%d%d",&N,&K);
for(int i=1;i<=N;i++)vi[i].clear();
for(int i=1;i<=N;i++)scanf("%d",&D[i]);
for(int i=1;i<=K;i++){
scanf("%d%d",&X,&Y);
vi[Y].push_back(X);
}
scanf("%d",&W);
printf("%d\n",f(W));
}
return 0;
}
|
cs |
728x90