#include <iostream>
#include <queue>
#include <cstring>
#define endl "\n"
using namespace std;
const int dy[] = { -1, +1, 0, 0 };
const int dx[] = { 0, 0, -1, +1 };
int T; // 테스트 케이스 개수
int M; // 배추밭 가로 길이
int N; // 배추밭 세로 길이
int K; // 심어진 배추 개수
int map[50][50]; // 배추밭 배추 존재 여부
int map_init[50][50]; // 배추밭 초기화용
void input()
{
cin >> M >> N >> K;
memcpy(map, map_init, sizeof(map_init));
for (int i = 0; i < K; ++i)
{
int x, y;
cin >> x >> y;
map[y][x] = 1;
}
}
void solve()
{
int cnt = 0;
int visited[50][50] = { 0, };
for (int r = 0; r < N; ++r)
{
for (int c = 0; c < M; ++c)
{
if (visited[r][c]) continue;
if (map[r][c] == 0) continue;
visited[r][c] = 1;
queue<pair<int, int> > q;
q.emplace(r, c);
while (!q.empty())
{
auto cur = q.front(); q.pop();
int cur_r = cur.first;
int cur_c = cur.second;
for (int dir = 0; dir < 4; ++dir)
{
int n_r = cur_r + dy[dir];
int n_c = cur_c + dx[dir];
if (n_r < 0 || n_r >= N || n_c < 0 || n_c >= M) continue;
if (map[n_r][n_c] == 0) continue;
if (visited[n_r][n_c]) continue;
visited[n_r][n_c] = 1;
q.emplace(n_r, n_c);
}
}
++cnt;
}
}
cout << cnt << endl;
}
int main()
{
freopen("boj_1012.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
for (int i = 0; i < T; ++i)
{
input();
solve();
}
return 0;
}
영역의 개수를 구하는 대표적인 BFS 문제