https://www.acmicpc.net/problem/2056
2056번: 작업
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해
www.acmicpc.net
깔끔코드
//작업
#include <vector>
#include <iostream>
#include <queue>
#define MAX 10001 // 최대 노드 개수
using namespace std;
int n, inDegree[MAX];
vector<int> a[MAX];
int result;
int t[MAX];
int dp[MAX];
void topologySort(){
queue<int> q;
// 진입차수가 0이면 q에 삽입
for (int i=1;i<=n;i++){
if (inDegree[i] == 0) q.push(i);
}
for (int i=1;i<=n;i++){
int x = q.front(); // now
q.pop();
for (int j=0;j<a[x].size();j++){
int next = a[x][j];
dp[next] = max(dp[next], dp[x]+t[next]);
inDegree[next]--; // 진입차수--
if(inDegree[next] == 0) q.push(next); // 진입차수 0일때
}
}
for (int i=1;i<=n;i++)
result = max(result, dp[i]);
cout << result;
}
int main(){
cin >> n;
for (int i=1;i<=n;i++){
int dist, m;
cin >> dist >> m ;
t[i]=dist;
dp[i] = dist;
for (int j=0;j<m;j++){
int x; cin >> x;
a[x].push_back(i);
inDegree[i]++;
}
}
topologySort();
}
출력확인코드
//작업
#include <vector>
#include <iostream>
#include <queue>
#define MAX 10001 // 최대 노드 개수
using namespace std;
int n, inDegree[MAX];
vector<int> a[MAX];
int result;
int t[MAX];
int dp[MAX];
void topologySort(){
queue<int> q;
// 진입차수가 0이면 q에 삽입
for (int i=1;i<=n;i++){
if (inDegree[i] == 0) q.push(i);
}
for (int i=1;i<=n;i++){
int x = q.front(); // now
q.pop();
for (int j=0;j<a[x].size();j++){
int next = a[x][j];
cout << "next : " << next << endl;
dp[next] = max(dp[next], dp[x]+t[next]);
inDegree[next]--; // 진입차수--
if(inDegree[next] == 0) q.push(next); // 진입차수 0일때
}
cout << "dp array : " ;
for (int k=0;k<n;k++){
cout << dp[k] << " ";
}
cout << endl;
}
for (int i=1;i<=n;i++)
result = max(result, dp[i]);
cout << result;
}
int main(){
cin >> n;
for (int i=1;i<=n;i++){
int dist, m;
cin >> dist >> m ;
t[i] = dist;
dp[i] = dist;
for (int j=0;j<m;j++){
int x; cin >> x;
a[x].push_back(i);
inDegree[i]++;
}
}
topologySort();
}
'자기개발👨💻 > 코딩 알고리즘' 카테고리의 다른 글
c++ 입출력 속도 향상 및 cin.tie 해야하는이유 (0) | 2023.11.03 |
---|---|
[c++] 백준2232 벌집 c++ (0) | 2023.11.02 |
[C++] 백준 14567 선수과목 (설명 작성중~) (0) | 2023.11.02 |
[Python] 백준 2559 수열 - 그리디 알고리즘 (0) | 2023.10.24 |
[Python] 백준 2559 수열 - 투포인터 알고리즘 (0) | 2023.10.24 |
[Python] 백준 2178 미로 탐색-dfs알고리즘-최단경로 (0) | 2023.10.18 |