Skip to content

Commit 0cdf506

Browse files
committed
Solve problem 44. Check DFS from csacademy
1 parent 86d9f39 commit 0cdf506

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

CS Academy/44. Check DFS.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include <stdio.h>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
int const N = 1e5 + 1;
7+
int n, m, p[N], order[N], dfs, dfs_order[N];
8+
bool vis[N];
9+
vector<vector<int> > g;
10+
11+
bool cmp(int a, int b) {
12+
return order[a] < order[b];
13+
}
14+
15+
void DFS(int v) {
16+
dfs_order[dfs++] = v;
17+
vis[v] = true;
18+
for(int i = 0; i < (int)g[v].size(); ++i)
19+
if(!vis[g[v][i]])
20+
DFS(g[v][i]);
21+
}
22+
23+
int main() {
24+
scanf("%d %d", &n, &m);
25+
for(int i = 0; i < n; ++i) {
26+
scanf("%d", p + i);
27+
order[p[i]] = i;
28+
}
29+
g.resize(n + 1);
30+
for(int i = 0, a, b; i < m; ++i) {
31+
scanf("%d %d", &a, &b);
32+
g[a].push_back(b);
33+
g[b].push_back(a);
34+
}
35+
36+
for(int i = 0; i < (int)g.size(); ++i)
37+
sort(g[i].begin(), g[i].end(), cmp);
38+
39+
DFS(1);
40+
41+
bool ok = true;
42+
for(int i = 0; i < n; ++i)
43+
if(p[i] != dfs_order[i]) {
44+
ok = false;
45+
break;
46+
}
47+
48+
printf("%d\n", ok);
49+
50+
return 0;
51+
}
52+

CS Academy/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
- [40. Move the Bishop](https://csacademy.com/contest/round-40/task/move-the-bishop)
1010
- [44. Frequent Numbers](https://csacademy.com/contest/round-44/task/frequent-numbers)
1111
- [44. Square Cover](https://csacademy.com/contest/round-44/task/square-cover)
12+
- [44. Check DFS](https://csacademy.com/contest/round-44/task/check-dfs)

0 commit comments

Comments
 (0)