๐ป
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 13265. ์์น ํ๊ธฐ(๋ฌธ์ ํธ๋ ์ค) ๋ณธ๋ฌธ
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 13265. ์์น ํ๊ธฐ(๋ฌธ์ ํธ๋ ์ค)
๋ํจ๋ 2020. 2. 24. 00:03๋ฌธ์
์ด๋ฆฐ ํ ๋ํด์ ์์น ๊ณต๋ถ๋ฅผ ์ข์ํ๋ค.
ํ ๋ํด์ ๋จผ์ ์ฌ๋ฌ ๋๊ทธ๋ผ๋ฏธ์ ๋๊ทธ๋ผ๋ฏธ ๋ ๊ฐ๋ฅผ ์ฐ๊ฒฐํ๋ ์ง์ ๋ค ๋ง์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ (๋ชจ๋ ๋๊ทธ๋ผ๋ฏธ๋ค ์ฌ์ด์ ์ง์ ์ด ์์ ํ์๋ ์๋ค), ์ฐ๊ฒฐ๋ ๋ ๋๊ทธ๋ผ๋ฏธ๋ ์๋ก ์์ด ๋ค๋ฅด๊ฒ ๋๋๋ก ์์ ์น ํ๊ณ ์ ํ๋ค.
์ด ๊ทธ๋ฆผ์ ์์น ํ๋๋ฐ ํ์ํ ์ต์์ ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํ ๋ํด์ 2 ๊ฐ์ง ์์์ผ๋ก ์์น ์ด ๊ฐ๋ฅํ์ง์ ์ฌ๋ถ๋ง์ ์๊ณ ์ถ์ดํ๋ค.
๋๊ทธ๋ผ๋ฏธ๋ค์ ๋ฒํธ์ ๋๊ทธ๋ผ๋ฏธ๋ค์ด ์๋ก ์ฐ๊ฒฐ๋ ์ง์ ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ด ๋๊ทธ๋ผ๋ฏธ๋ค์ด 2 ๊ฐ์ง ์์์ผ๋ก ์์น ์ด ๊ฐ๋ฅํ์ง ์์๋ด์.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T ๊ฐ ์ฃผ์ด์ง๋ค.
๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ๋๊ทธ๋ผ๋ฏธ์ ๊ฐ์ n(n<=1000)๊ณผ ์ง์ ๋ค์ ๊ฐ์ m(m<=100,000)์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์ ์ค๋ถํฐ m ์ค์ ๊ฑธ์ณ ๋๊ทธ๋ผ๋ฏธ๋ค์ด ์ฐ๊ฒฐ๋ ์ง์ ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (x y) ๋ก ์ฃผ์ด์ง๋ฉด ๋๊ทธ๋ผ๋ฏธ x ์ ๋๊ทธ๋ผ๋ฏธ y ๊ฐ ์ง์ ์ผ๋ก ์๋ก ์ฐ๊ฒฐ๋์๋ค๋ ์๋ฏธ์ด๋ค. ๋๊ทธ๋ผ๋ฏธ๋ค์ ์ซ์๋ 1 ๋ถํฐ n ๊น์ง์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์ possible ์ด๋ impossible ์ ์ถ๋ ฅํ๋ค. 2 ๊ฐ์ง ์์์ผ๋ก ์์น ์ด ๊ฐ๋ฅํ๋ฉด possible. ๋ถ๊ฐ๋ฅํ๋ฉด impossible ์ด๋ค.
์์ ์ ๋ ฅ1
3 ---------- ๊ฐ์ ----------
4 5 --- ์ฒซ๋ฒ์งธ ํ
์คํธ ์ผ์ด์ค ---
1 2
2 3
3 4
1 3
2 4
6 9 --- ๋๋ฒ์งธ ํ
์คํธ ์ผ์ด์ค ---
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6
8 8 --- ์ธ๋ฒ์งธ ํ
์คํธ ์ผ์ด์ค ---
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 1
์์ ์ถ๋ ฅ1
impossible
possible
possible
์๊ฐ
์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ๊ฒฐ๊ตญ ์คํฐ๋ ์ ๊น์ง ํ์ง ๋ชปํ๋ค.
ํผ ์ฌ๋๋ค ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ํผ์ ํ์ด๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.
์์ฑํ ์ฝ๋
#include<iostream>
#include<queue>
using namespace std;
int T, n, m;
bool flag;
void dfs(int idx, int cnt, bool cir[][1001], int* color) {
if (!flag) {
return;
}
// ์์์ 1, 2 ๋๊ฐ์ง ๊ฒฝ์ฐ
if (color[idx] == 1) {
for (int i = 1;i <= n;i++) {
if (cir[idx][i]) {
if (color[i] == 1) flag = false;
else if (color[i] == 0) color[i] = 2;
else continue;
dfs(i, cnt + 1, cir, color);
}
}
}
else if (color[idx] == 2) {
for (int i = 1;i <= n;i++) {
if (cir[idx][i]) {
if (color[i] == 2) flag = false;
else if (color[i] == 0) color[i] = 1;
else continue;
dfs(i, cnt + 1, cir, color);
}
}
}
}
int main(int* argc, char** argv) {
cin.sync_with_stdio(false);
cin.tie(0);
cin >> T;
for (int i = 0;i < T;i++) {
cin >> n >> m;
bool cir[1001][1001] = { false, };
int color[1001] = { 0, };
for (int j = 0;j < m;j++) {
int x, y;
cin >> x >> y;
cir[x][y] = true;
cir[y][x] = true;
}
flag = true;
for (int i = 1;i <= n;i++) {
bool alone = true;
for (int j = 1;j <= n;j++) {
if (cir[i][j]) {
alone = false;
break;
}
}
if (!alone) { // ํผ์ ๋๋จ์ด์์ง ์์ ๊ฒฝ์ฐ ์์. ๋ถ์ด์๋ ๊ฒ๋ค๋ง ๊ณ ๋ คํ๋ฉด ๋จ
color[i] = 1;
dfs(i, 0, cir, color);
break;
}
}
if (flag) cout << "possible\n";
else cout << "impossible\n";
}
return 0;
}
+) ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ ์ฝ๋
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int ch[1001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int T,n,m,x,y;
cin >> T;
while (T-- > 0)
{
int V, E;
cin >> V >> E;
vector <int> vc[1002];
vector <bool> visited(1002, false);
vector <int> color(1002);
for (int i = 0; i < E; i++)
{
int from, to;
cin >> from >> to;
vc[from].push_back(to);
vc[to].push_back(from);
}
int palette;
bool ch = true;
for (int i = 1; i <= V; i++)
{
if (visited[i]) continue;
queue<int> q;
q.push(i);
// ์์์ -1, 1 ๋๊ฐ์ง
while (!q.empty())
{
int here = q.front();
q.pop();
if (visited[here]) continue;
visited[here] = true;
if (color[here] == 0)
{
color[here] = 1;
palette = -1;
}
else if (color[here] == 1)
palette = -1;
else if (color[here] == -1)
palette = 1;
for (int i = 0; i < vc[here].size(); i++)
{
int next = vc[here][i];
if (color[next] != 0 && color[next] == -palette)
{
ch = false;
break;
}
color[next] = palette;
q.push(next);
}
if (!ch) break;
}
}
if (ch) cout << "possible\n";
else cout << "impossible\n";
}
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋์ ๊ณํ๋ฒ - 2579. ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2020.02.25 |
---|---|
[๋ฐฑ์ค] ์ ๋ ฌ - 2947. ๋๋ฌด ์กฐ๊ฐ (0) | 2020.02.24 |
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 1182. ๋ถ๋ถ์์ด์ ํฉ (0) | 2020.02.21 |
[๋ฐฑ์ค] ๋์ ๊ณํ๋ฒ - 1753. ์ต๋จ๊ฒฝ๋ก(๋ฌธ์ ํธ๋์ค) (0) | 2020.02.20 |
[๋ฐฑ์ค] DFS์BFS - 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ(DFSํ์ด) (0) | 2020.02.20 |