-
최종 순위 - 3665Algorithm/BOJ 2020. 3. 12. 19:2712345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879//3665 - 최종 순위#include <iostream>#include <vector>using namespace std;int N, M;int arr[501];int idx[501];int adj[501][501];vector<bool> visit;void init(){cin >> N;for (int i = 1; i <= N; ++i)for (int j = 1; j <= N; ++j)adj[i][j] = 0;visit = vector<bool>(N + 1, false);for (int i = 1; i <= N; ++i)cin >> arr[i], idx[arr[i]] = i;for (int i = 1; i < N; ++i)for (int j = i + 1; j <= N; ++j)adj[i][j] = 1;cin >> M;int x, y;for (int i = 0; i < M; ++i){cin >> x >> y;x = idx[x];y = idx[y];if (adj[x][y])adj[x][y] = 0, adj[y][x] = 1;else if(adj[y][x])adj[y][x] = 0, adj[x][y] = 1;}}void dfs(vector<int> &order, int here){visit[here] = true;for (int there = 1; there <= N; ++there)if (adj[here][there] && !visit[there])dfs(order, there);order.push_back(here);}void topologicalSort(){vector<int> order;for (int i = 1; i <= N; ++i)if (!visit[i])dfs(order, i);for (int i = N - 1; i > 0; --i)for (int j = i - 1; j >= 0; --j)if (adj[order[j]][order[i]]){cout << "IMPOSSIBLE"<< "\n";return;}for (int i = N - 1; i >= 0; --i)cout << arr[order[i]] << " ";cout << "\n";}int main(){ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);int C;cin >> C;for (int tn = 0; tn < C; ++tn){init();topologicalSort();}}
cs https://www.acmicpc.net/problem/3665
3665번: 최종 순위
문제 올해 ACM-ICPC 대전 인터넷 예선에는 총 n개의 팀이 참가했다. 팀은 1번부터 n번까지 번호가 매겨져 있다. 놀랍게도 올해 참가하는 팀은 작년에 참가했던 팀과 동일하다. 올해는 인터넷 예선 본부에서는 최종 순위를 발표하지 않기로 했다. 그 대신에 작년에 비해서 상대적인 순위가 바뀐 팀의 목록만 발표하려고 한다. (작년에는 순위를 발표했다) 예를 들어, 작년에 팀 13이 팀 6 보다 순위가 높았는데, 올해 팀 6이 팀 13보다 순위가 높다면, (
www.acmicpc.net
최종 순위
위상정렬 문제입니다.
몇몇 팀의 순위가 바뀌었을때, 바뀐 순위대로 출력해주면 됩니다.
맨 처음 주어진 순위를 단방향 그래프로 만든후,
순위가 바뀐 팀들이 주어질때, 해당 팀을 나타내는 노드 사이에 연결된 간선의 방향을 바꿔준다음 위상정렬 알고리즘을 이용하면 됩니다.
DAG라면 바뀐 순위를 출력할수 있고, 싸이클이 있다면 IMPOSSIBLE을 출력하면 됩니다.
이때 함정이 문제에서 요구하는 '?'를 출력하는 경우는 절대 발생하지 않습니다.
두 팀의 간선의 방향을 아무리 바꾼들 싸이클은 발생할수 있지만 순서가 모호해지는 위상은 나타날수 없기 때문입니다.
'Algorithm > BOJ' 카테고리의 다른 글
퀘스트 중인 모험가 - 15816 (0) 2020.03.13 전화번호 목록 - 5052 (0) 2020.03.12 최소비용 구하기 2 - 11779 (0) 2020.03.12 열쇠 - 9328 (0) 2020.03.12 백조의 호수 - 3197 (0) 2020.03.11