ACM: Intro to Graph and DFS - Solutions
Difference between en1 and en2, changed 16 character(s)
### [A. Graph: Road Trip](https://codeforces.me/group/e8jUNwDnHj/contest/500552/problem/A)↵

<spoiler summary="Python Solution">↵
```python↵
def read():↵
    return int(input())↵
def read_list():↵
    return [int(i) for i in input().split()]↵

test_count = read()↵
for test in range(test_count):↵
n, m = read_list();↵

g = [[] for i in range(n+1)]↵
mark = [False] * (n+1)↵

for i in range(m):↵
u, v = read_list()↵
g[u].append(v)↵
g[v].append(u)↵

def dfs(node):↵
if mark[node]:↵
return↵
mark[node] = True↵
for i in g[node]:↵
dfs(i)↵


dfs(1)↵

if mark[n]:↵
print("yes")↵
else:↵
print("no")↵
```↵
</spoiler>↵


<spoiler summary="C++ Solution">↵
```c++↵
#include "cstdlib"↵
#include "cstring"↵
#include "cmath"↵
#include "iostream"↵
#include "stack"↵
#include "vector"↵
#include "array"↵
#include "queue"↵
#include "algorithm"↵
#include "map"↵
#include "set"↵
#include "unordered_map"↵
#include "unordered_set"↵
#include "numeric"↵
#include "string"↵
#include "iomanip"↵
#include "climits"↵
#include "functional"↵
#include "cctype"↵

using namespace std; ↵
#define array_size(a) (sizeof(a)/sizeof(a[0]))↵
#define rep(name, start, end) for (int name=(start); name<=(end); name++)↵
#define repr(name, start, end) for (int name=(start); name>=(end); name--)↵
#define all(a) a.begin(), a.end()↵
using ll = long long;↵
using ull = unsigned long long;↵
using uint = unsigned int;↵
#define MOD 1000000007↵
// #define MOD 998244353↵
#define NL '\n'↵
#define nl '\n'↵

template<typename T> ↵
using min_heap = priority_queue<T, vector<T>, greater<T>>;↵

template<typename T> ↵
using max_heap = priority_queue<T>;↵

template<typename T> ↵
using matrix = vector<vector<T>>;↵

template<typename T> ↵
void _dbg(const char* name, T cont) {↵
cerr << "#" << name << " = {"; ↵
int n = cont.size();↵
int idx = 0;↵
for (auto i: cont) {↵
cerr << i;↵
if (++idx < n) {↵
cerr << ", ";↵
}↵
}↵
cerr << "}" << nl;↵
}↵


#ifndef ONLINE_JUDGE↵
#define dbg(x) _dbg(#x, x) ↵
#else ↵
#define dbg(x)↵
#endif↵

matrix<int>  g;↵
vector<bool> v;↵

void dfs(int node) {↵
if (v[node]) return;↵
v[node] = true;↵
for (int i: g[node]) {↵
dfs(i);↵
}↵
}↵

void solve() {↵
int n, m; cin >> n >> m;↵
g.resize(n+1);↵
v.resize(n+1);↵
rep (i, 1, m) {↵
int a, b; cin >> a >> b;↵
g[a].push_back(b);↵
g[b].push_back(a);↵
}↵
dfs(1);↵
if (v[n]) {↵
cout << "YES" << nl;↵
} else {↵
cout << "NO" << nl;↵
}↵
g.clear();↵
v.clear();↵
} ↵


int main() {↵
#ifndef ONLINE_JUDGE ↵
freopen("input.txt", "r", stdin);↵
// freopen("output.txt", "w", stdout);↵
#else↵
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);↵
#endif↵

int t=1;↵
cin >> t;↵
rep(test, 1, t)  {↵
solve();↵
}↵
}↵
```↵
</spoiler>↵


### [B. Graph: Counting Islands](https://codeforces.me/group/e8jUNwDnHj/contest/500552/problem/B)↵

<spoiler summary="Python Solution">↵
```python↵
def read():↵
    return int(input())↵
def read_list():↵
    return [int(i) for i in input().split()]↵
 ↵
test_count = read()↵
for test in range(test_count):↵
n, m = read_list();↵
 ↵
g = [[] for i in range(n+1)]↵
mark = [False] * (n+1)↵
 ↵
for i in range(m):↵
u, v = read_list()↵
g[u].append(v)↵
g[v].append(u)↵
 ↵
def dfs(node):↵
if mark[node]:↵
return↵
mark[node] = True↵
for i in g[node]:↵
dfs(i)↵
 ↵
result = 0↵
for i in range(1, n+1):↵
if not mark[i]:↵
dfs(i)↵
result += 1↵
print(result)↵
 ↵

```↵
</spoiler>↵


<spoiler summary="C++ Solution">↵
```c++↵
#include "cstdlib"↵
#include "cstring"↵
#include "cmath"↵
#include "iostream"↵
#include "stack"↵
#include "vector"↵
#include "array"↵
#include "queue"↵
#include "algorithm"↵
#include "map"↵
#include "set"↵
#include "unordered_map"↵
#include "unordered_set"↵
#include "numeric"↵
#include "string"↵
#include "iomanip"↵
#include "climits"↵
#include "functional"↵
#include "cctype"↵
 ↵
using namespace std; ↵
#define array_size(a) (sizeof(a)/sizeof(a[0]))↵
#define rep(name, start, end) for (int name=(start); name<=(end); name++)↵
#define repr(name, start, end) for (int name=(start); name>=(end); name--)↵
#define all(a) a.begin(), a.end()↵
using ll = long long;↵
using ull = unsigned long long;↵
using uint = unsigned int;↵
#define MOD 1000000007↵
// #define MOD 998244353↵
#define NL '\n'↵
#define nl '\n'↵
 ↵
template<typename T> ↵
using min_heap = priority_queue<T, vector<T>, greater<T>>;↵
 ↵
template<typename T> ↵
using max_heap = priority_queue<T>;↵
 ↵
template<typename T> ↵
using matrix = vector<vector<T>>;↵
 ↵
template<typename T> ↵
void _dbg(const char* name, T cont) {↵
cerr << "#" << name << " = {"; ↵
int n = cont.size();↵
int idx = 0;↵
for (auto i: cont) {↵
cerr << i;↵
if (++idx < n) {↵
cerr << ", ";↵
}↵
}↵
cerr << "}" << nl;↵
}↵
 ↵
 ↵
#ifndef ONLINE_JUDGE↵
#define dbg(x) _dbg(#x, x) ↵
#else ↵
#define dbg(x)↵
#endif↵
 ↵
matrix<int>  g;↵
vector<bool> v;↵
 ↵
void dfs(int node) {↵
if (v[node]) return;↵
v[node] = true;↵
for (int i: g[node]) {↵
dfs(i);↵
}↵
}↵
 ↵
void solve() {↵
int n, m; cin >> n >> m;↵
g.resize(n+1);↵
v.resize(n+1);↵
rep (i, 1, m) {↵
int a, b; cin >> a >> b;↵
g[a].push_back(b);↵
g[b].push_back(a);↵
}↵
int result = 0;↵
rep (i, 1, n) {↵
if (!v[i]) {↵
dfs(i);↵
result++;↵
}↵
}↵
cout << result << nl;↵
g.clear();↵
v.clear();↵
} ↵

 ↵
int main() {↵
#ifndef ONLINE_JUDGE ↵
freopen("input.txt", "r", stdin);↵
// freopen("output.txt", "w", stdout);↵
#else↵
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);↵
#endif↵
 ↵
int t=1;↵
cin >> t;↵
rep(test, 1, t)  {↵
solve();↵
}↵
}↵
```↵
</spoiler>↵


### [C. Graph: Counting Rooms](https://codeforces.me/group/e8jUNwDnHj/contest/500552/problem/C)↵

<spoiler summary="Python Solution">↵
```python↵
def read():↵
    return int(input())↵
def read_list():↵
    return [int(i) for i in input().split()]↵
 ↵
test_count = read()↵
for test in range(test_count):↵
n, m = read_list();↵
 ↵
g = [input() for i in range(n)]↵
mark = [[False] * m for i in range(n)]↵
 ↵
def dfs(i, j):↵
if g[i][j] == '#' or mark[i][j]:↵
return↵
mark[i][j] = True↵
dfs(i+1, j)↵
dfs(i-1, j)↵
dfs(i, j+1)↵
dfs(i, j-1)↵
 ↵
result = 0↵
for i in range(n):↵
for j in range(m):↵
if not mark[i][j] and g[i][j] == '.':↵
dfs(i, j)↵
result += 1↵
print(result)↵
 ↵

```↵
</spoiler>↵


<spoiler summary="C++ Solution">↵
```c++↵
#include "cstdlib"↵
#include "cstring"↵
#include "cmath"↵
#include "iostream"↵
#include "stack"↵
#include "vector"↵
#include "array"↵
#include "queue"↵
#include "algorithm"↵
#include "map"↵
#include "set"↵
#include "unordered_map"↵
#include "unordered_set"↵
#include "numeric"↵
#include "string"↵
#include "iomanip"↵
#include "climits"↵
#include "functional"↵
#include "cctype"↵
 ↵
using namespace std; ↵
#define array_size(a) (sizeof(a)/sizeof(a[0]))↵
#define rep(name, start, end) for (int name=(start); name<=(end); name++)↵
#define repr(name, start, end) for (int name=(start); name>=(end); name--)↵
#define all(a) a.begin(), a.end()↵
using ll = long long;↵
using ull = unsigned long long;↵
using uint = unsigned int;↵
#define MOD 1000000007↵
// #define MOD 998244353↵
#define NL '\n'↵
#define nl '\n'↵
 ↵
template<typename T> ↵
using min_heap = priority_queue<T, vector<T>, greater<T>>;↵
 ↵
template<typename T> ↵
using max_heap = priority_queue<T>;↵
 ↵
template<typename T> ↵
using matrix = vector<vector<T>>;↵
 ↵
template<typename T> ↵
void _dbg(const char* name, T cont) {↵
cerr << "#" << name << " = {"; ↵
int n = cont.size();↵
int idx = 0;↵
for (auto i: cont) {↵
cerr << i;↵
if (++idx < n) {↵
cerr << ", ";↵
}↵
}↵
cerr << "}" << nl;↵
}↵
 ↵
 ↵
#ifndef ONLINE_JUDGE↵
#define dbg(x) _dbg(#x, x) ↵
#else ↵
#define dbg(x)↵
#endif↵
 ↵
vector<string>  g;↵
vector<vector<bool>> v;↵
 ↵
void dfs(int i, int j) {↵
if (g[i][j] == '#' || v[i][j]) return;↵
v[i][j] = true;↵
 ↵
dfs(i,j+1);↵
dfs(i,j-1);↵
dfs(i+1,j);↵
dfs(i-1,j);↵
}↵
 ↵
void solve() {↵
int n, m; cin >> n >> m;↵
g.resize(n);↵
v.resize(n, vector<bool>(m));↵
rep (i, 0, n-1) {↵
cin >> g[i];↵
}↵
int result = 0;↵
rep (i, 0, n-1) {↵
rep (j, 0, m-1) {↵
if (!v[i][j] && g[i][j] == '.') {↵
dfs(i, j);↵
result++;↵
}↵
}↵
}↵
cout << result << nl;↵
g.clear();↵
v.clear();↵
} ↵

 ↵
int main() {↵
#ifndef ONLINE_JUDGE ↵
freopen("input.txt", "r", stdin);↵
// freopen("output.txt", "w", stdout);↵
#else↵
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);↵
#endif↵
 ↵
int t=1;↵
cin >> t;↵
rep(test, 1, t)  {↵
solve();↵
}↵
}↵
```↵
</spoiler>↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English ammar007 2024-02-08 19:51:13 16 (published)
en1 English ammar007 2024-02-08 19:47:03 8581 Initial revision (saved to drafts)