APS/백준
[2252] 줄 세우기 C++
문래동까마귀
2022. 4. 18. 19:43
https://www.acmicpc.net/problem/2252
2252번: 줄 세우기
첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의
www.acmicpc.net
- PASS
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<vector<int>> vec;
vector<int> result;
int N, M;
int visit[32001];
void dfs(int num) {
visit[num] = 1;
for (auto i : vec[num]) {
if (visit[i])
continue;
dfs(i);
}
result.push_back(num);
}
int main() {
cin >> N >> M;
vec.resize(N + 1);
for (int i = 0; i < M; i++) {
int A, B;
cin >> A >> B;
vec[A].push_back(B);
}
for (int i = 1; i <= N; i++) {
if (visit[i]==0)
dfs(i);
}
for (int i = N - 1; i >= 0; i--)
cout << result[i] << " ";
return 0;
}
- FAIL
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
vector<int> row;
int N, M;
cin >> N >> M;
for (int i = 0; i < M; i++) {
int A, B;
cin >> A >> B;
int flag = 0;
for (int j = 0; j < row.size(); j++) {
if (row[j] == B) {
row.insert(row.begin() + j, A);
flag = 1;
break;
}
}
if (flag == 0) {
row.push_back(A);
row.push_back(B);
}
}
for (int i = 0; i < N; i++)
cout << row[i] << " ";
return 0;
}