https://www.acmicpc.net/problem/13244
트리인지 아닌지 구분하는 문제
입력
T: 테스트 케이스
N: 노드 수
M: edge 수
M개 줄에 걸쳐 연결된 노드 2개
출력
tree OR graph
연결된 노드 a,b가 입력되면 c[a][b]=1, c[b][a]=1
dfs
로 모든 노드가 서로 연결되는지 체크
간선m
의 개수가 n-1
인지 체크
#include <iostream>
using namespace std;
int t, n, m, a, b, cnt, c[1001][1001], visited[1001];
void dfs(int node)
{
visited[node] = 1;
for (int i = 1; i <= n; i++)
{
if (c[node][i] && !visited[i])
dfs(i);
}
}
int main()
{
cin >> t;
while (t--)
{
fill(visited, visited + 1001, 0);
fill(&c[0][0], &c[0][0] + 1001 * 1001, 0);
cnt = 0;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> a >> b;
c[a][b] = 1, c[b][a] = 1;
}
for (int i = 1; i <= n; i++)
{
if (!visited[i])
{
dfs(i);
cnt++;
}
}
if (m == n - 1 && cnt == 1)
cout << "tree"
<< "\n";
else
cout << "graph"
<< "\n";
}
}