1. 문제링크https://www.acmicpc.net/problem/1766 2. 문제해설이 문제는 위상정렬 문제에 priority_queue를 사용하는 문제이다.1. 위상정렬을 한다.2. 하는 중에 queue를 priority_queue로 바꿔서 위상정렬을 한다. 3. 소스코드 #include #include #include #include #include using namespace std; #define fio ios_base::sync_with_stdio(0); cin.tie(0); #define MAX_NUM 32000 int main(){ fio int n, m; int idgr[MAX_NUM+1]={0}; vector v[MAX_NUM+1]; priority_queue q; cin >> n..
1. 문제링크https://www.acmicpc.net/problem/1005 2. 문제해설이 문제는 간단한 위상정렬 문제이다.1. 각 노드까지 오는데 걸리는 시간을 저장하는 배열을 만든다.2. 위상정렬을 하면서 축적하며 가장 큰 값들을 들고 온다.3. 원하는 노드에 왔을 때 그 노드를 만드는데 걸리는 시간을 더한 후 출력한다. 3. 소스코드 #include #include #include #include #include using namespace std; #define fio ios_base::sync_with_stdio(0); cin.tie(0); #define NODE 1000 void testcase(); struct node{ int e, w; }; int main(){ fio int t; c..
1. 문제링크https://www.acmicpc.net/problem/2229 2. 해설이 문제는 dp문제로, 연속되게 조를 짜는데, 조원들 중 가장 큰 점수와 가장 적은 점수의 차가 최대한 많이 나게 만드는 것이 목표인 문제이다. i부터 j까지 연속된 조들의 최대 값과 최소 값을 전부 저장한 후에 dp를 풀었다. dp 테이블은 "dp[i] = i번째 학생까지 조를 짤 때 최대로 얻을 수 있는 점수" 로 구현했다. 필자는 dp[i]를 구하기 위해서 0~i 돌면서 dp[index] 에 저장 되어 있는 값 + (index + 1) ~ i 의 최대 차이 를 구해서 저장하고 다녔다.정리하자면1. i ~ j 의 최대, 최소값을 구하고 저장한다.2. dp[i]를 구하기 위해 0~i 를 돌면서 최적을 찾는다. 시간복..