diff --git a/src/week4/BOJ13244/BOJ13244_V1.cpp b/src/week4/BOJ13244/BOJ13244_V1.cpp new file mode 100644 index 0000000..724221d --- /dev/null +++ b/src/week4/BOJ13244/BOJ13244_V1.cpp @@ -0,0 +1,59 @@ +#include +using namespace std; +int visited[10][1001]; +vector>> injs; +vector isTree; +int N; +bool dfs(int here, int num, int prev) { + visited[num][here] = 1; + for (int next : injs[num][here]) { + if (next == prev) continue; + if (visited[num][next]) return false; + if (!dfs(next, num, here)) return false; + } + + return true; +} +int main() { + + cin >> N; + injs.resize(N,vector>()); + isTree.resize(N); + for (int i = 0; i < N; i++) { + int nodes; + int inp_num; + bool tree_flag = true; + cin >> nodes; + cin >> inp_num; + injs[i].resize(nodes+1); + if (inp_num != nodes-1) + tree_flag = false; + for (int j=0; j> a >> b; + injs[i][a].push_back(b); + injs[i][b].push_back(a); + } + if (tree_flag && !dfs(1, i, 0)) + tree_flag = false; + + + for (int j=1; j<=nodes; j++) { + if (!visited[i][j]) { + tree_flag = false; + break; + } + } + + isTree[i] = tree_flag; + } + + + for (int i = 0; i < N; i++) { + if (isTree[i]) + cout << "tree" << '\n'; + else + cout << "graph" << '\n'; + } + return 0; +} \ No newline at end of file diff --git a/src/week4/BOJ13244/BOJ13244_V2.cpp b/src/week4/BOJ13244/BOJ13244_V2.cpp new file mode 100644 index 0000000..ee094d3 --- /dev/null +++ b/src/week4/BOJ13244/BOJ13244_V2.cpp @@ -0,0 +1,57 @@ +#include +using namespace std; +int N,visited[1001]; +vector> inj; +vector ret; +void dfs(int here) { + visited[here] = 1; + for (int next : inj[here]) { + if (!visited[next]) dfs(next); + } +} +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + cin >> N; + for (int i = 0; i < N; i++) { + memset(visited, 0, sizeof(visited)); + int nodes; + int inp_num; + cin >> nodes >> inp_num; + inj.clear(); + inj.resize(nodes + 1); + + for (int j = 0; j < inp_num; j++) { + int a, b; + cin >> a >> b; + inj[a].push_back(b); + inj[b].push_back(a); + } + + if (inp_num != nodes - 1) { + ret.push_back(false); + continue; + } + + int cnt = 0; + for (int j = 1; j <= nodes; j++) { + if (!visited[j]) { + dfs(j); + cnt++; + } + } + if (cnt != 1) { + ret.push_back(false); + continue; + } + + ret.push_back(true); + } + + for (int i = 0; i < N; i++) { + if (ret[i]) cout << "tree\n"; + else cout << "graph\n"; + } +} \ No newline at end of file