- ๋ค์ต์คํธ๋ผ
- ์นด์นด์ค2021
- ์น๋ฆฐ์ด
- ์ด๋ถํ์
- DFS
- ๋ฐฑ์ค
- C++
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ํธ๋ฆฌ
- ์์ฝ๋
- ๋นํธ๋งต
- BFS
- ์๊ณ ๋ฆฌ์ฆ
- ์ฌ๊ท
- DP
- ๋นํธ๋ง์คํน
- LCs
- ์นด์นด์ค ์ฝํ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- Python
- ํ๋ก๊ทธ๋๋จธ์ค
- Union-Find
- golang
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- go
- nestjs
- ์ํฐ๋
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- js
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 1707. ์ด๋ถ๊ทธ๋ํ ๋ณธ๋ฌธ
๋ฌธ์
ํ์ด
์ฒ์์๋, ๋ฒกํฐ ๋๊ฐ๋ฅผ ๋ง๋ค์ด์ ๊ฐ ๊ทธ๋ฃน์ ๋
ธ๋๋ค์ ์ฑ์๋๊ฐ๋ ํ์์ผ๋ก ํ๋๋ฐ ๋ฌธ์ ์ ์ด ์์๋ค.
๊ทธ๋ํ๊ฐ ๊ผญ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋์ง ์๋๋ค๋ ๊ฒ์ด์๋ค. ์๋ ๊ทธ๋ฆผ์ case2์ ๊ฐ์ด ๋
๋ฆฝ์ ์ธ ์ฌ๋ฌ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์์๋ค.
๊ทธ๋์ ์์ ํ๊ฒ ์ผ๋ฐ์ ์ธ ๊ทธ๋ํ ํ์ด ๋ฐฉ์์ ์ด์ฉํ์๋ค.
BFS๋ก ๊ทธ๋ํ ํ์ ํ์, ํด๋น ๊ทธ๋ํ๊ฐ ์ด๋ถ๊ทธ๋ํ์ธ์ง ํ์ธํ๋ ๊ณผ์ ์ ๊ฑฐ์ณค๋ค.
๊ฐ์ ์ ์ ๋ ฅ๋ฐ์ ๋, v1 -> v2๋ง ์ ์ฅํด์ ํ๋ ธ์ต๋๋ค๊ฐ ๋์๋ค.
๋ฌด๋ฐฉํฅ๊ทธ๋ํ์ด๊ธฐ ๋๋ฌธ์, v2 -> v1๋ ์ ์ฅํด์ผํ๋ค!
๊ทธ๋ฆฌ๊ณ BFS๋ฅผ ํ ๋ฒ๋ง ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๊น์ง ์ฌ๋ฌ๋ฒ ๋๋ ค์ผํ๋ค.
์ฝ๋
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define LEFT 1
#define RIGHT 2
vector<int> graph[200001];
int visited[200001] = {0,};
void BFS(int start){
queue<int> q;
q.push(start);
int flag = LEFT;
visited[start] = flag;
while(!q.empty()){
int now = q.front();
q.pop();
flag = visited[now];
int nextFlag = LEFT;
if (flag == LEFT) nextFlag = RIGHT;
for (int i=0;i<graph[now].size();i++){
int next = graph[now][i];
if (visited[next] == 0){
q.push(next);
visited[next] = nextFlag;
}
}
}
}
bool isBipartite(int V) {
for (int i=0; i<V; i++){
for (int j=0; j<graph[i].size(); j++){
if (visited[i] == visited[graph[i][j]])
return 0;
}
}
return 1;
}
int main(void){
int T;
cin >> T;
for (int t=0;t<T;t++){
int V,E;
cin >> V >> E;
for (int e=0;e<E;e++){
int a,b;
cin >> a >> b;
graph[a-1].push_back(b-1);
graph[b-1].push_back(a-1); //๋ฌด๋ฐฉํฅ ๊ทธ๋ํ !!!
}
// ๊ทธ๋ํ ํ์
// BFS(0);
for (int i = 0; i < V; i++) {
if (visited[i] == 0) { // ํด๋น ๋
ธ๋๋ฅผ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
BFS(i);
}
}
// ์ด๋ถ๊ทธ๋ํ ์ฌ๋ถ ํ์ธ
bool result = isBipartite(V);
//๊ฒฐ๊ณผ ์ถ๋ ฅ
if (result)
cout << "YES" << endl;
else
cout << "NO" << endl;
// ์ด๊ธฐํ
for (int i=0;i<V;i++){
graph[i].clear();
}
fill(&visited[0],&visited[200001],0);
}
}
๊ฒฐ๊ณผ
์ฐธ๊ณ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2146. ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2021.05.19 |
---|---|
[๋ฐฑ์ค/C++] 2589. ๋ณด๋ฌผ์ฌ (0) | 2021.05.19 |
[๋ฐฑ์ค/C++] 2206. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2021.05.12 |
[๋ฐฑ์ค/C++] 16236.์๊ธฐ์์ด (0) | 2021.05.04 |
[๋ฐฑ์ค/C++] 1987. ์ํ๋ฒณ (0) | 2021.05.04 |