본문 바로가기
Algorithm 💫/Problem Solving

[백준] 1005번: ACM craft / C++

by 돼지고기맛있다 2021. 10. 3.
반응형

✏️ 문제 링크

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

 

1005번: ACM Craft

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

www.acmicpc.net

 

 

✏️ 문제 설명 (더보기 클릭 👆🏻)

 

✏️ 문제 풀이

기본 위상정렬과 BFS 섞은 문제이다...!

 

👇🏻 위상정렬에 대한 설명 👇🏻

https://yabmoons.tistory.com/409

 

[ 백준 2252 ] 줄 세우기 (C++)

백준의 줄 세우기(2252) 문제이다. [ 문제 바로가기 ] [ 문제풀이 ] 학생들을 줄을 세워야 하는데, 전체 학생들의 키를 비교한 것이 아닌, 일부 학생들이 키를 비교한 것만으로 줄을 세워야 하는 문

yabmoons.tistory.com

 

위의 코드를 바탕으로 dp를 추가해주면 되는데 각 dp의 칸은 "건물 i를 짓는데 걸리는 최소 시간이다!"

최소 시간이라고하면 앞에 모든 스텝이 끝나야하니 앞의 스텝중 가장 큰 값과 건물 i를 더해야한다. 

 

for(int i=0; i<vec[node].size(); i++){
   int nxt=vec[node][i];
   dp[nxt]=max(dp[nxt], dp[node]+spent[nxt]);
   entry[nxt]--;
   if(entry[nxt]==0){
   q.push(nxt);
   }
}

 

✏️ 문제 코드

#include <bits/stdc++.h>

using namespace std;
using pii=pair<int, int>;
int main(){
    int T; cin>>T;
    
    while(T--){
        
        int N, K, W; 
        cin>>N>>K;
        vector<long> spent(N+1, 0); 
        vector<int> vec[N+1];
        vector<int> entry(N+1, 0);
        vector<long> dp(N+1, 0);
        
        for(int i=1; i<=N; i++) cin>>spent[i];
        for(int i=0; i<K; i++){
            int a, b; cin>>a>>b;
            entry[b]++;
            vec[a].push_back(b);
        }
        cin>>W;
        
        queue<int> q;
        for(int i=1; i<=N; i++){
            if(entry[i]==0) {q.push(i); dp[i]=spent[i];}//node, step
        }
        while(!q.empty()){
            int t=q.front(); q.pop();
            int node=t;
            for(int i=0; i<vec[node].size(); i++){
                int nxt=vec[node][i];
                dp[nxt]=max(dp[nxt], dp[node]+spent[nxt]);
                entry[nxt]--;
                if(entry[nxt]==0){
                    q.push(nxt);
                }
            }
        }
        
        cout<<dp[W]<<"\n";
        
    }
    return 0;
}

 

 

 

 ⭐ if feedback and question : comment please⭐  

 

 

 

 

 

반응형

댓글