Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
백준 1976번 _ 여행 가자 본문
https://www.acmicpc.net/problem/1976
1976번: 여행 가자
동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할
www.acmicpc.net
풀이방법
그냥 유니온 파인드 알고리즘 이용하면 답 나옴(밑의 url참조)
https://kunkunwoo.tistory.com/22
백준 1197번 _최소 스패닝 트리
https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를..
kunkunwoo.tistory.com
전체코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int parents[201];
int N, M;
void makeParents()
{
for (int i = 1; i <= N; i++)
parents[i] = i;
}
int getParent(int a)
{
if (parents[a] == a) return a;
return parents[a] = getParent(parents[a]);
}
void Union(int a, int b)
{
a = getParent(a);
b = getParent(b);
if (a == b)
return;
parents[b] = a;
}
void Input()
{
cin >> N;
cin >> M;
makeParents();
int value;
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cin >> value;
if (value == 0)
continue;
Union(i, j);
}
}
}
void solve()
{
vector<int>travel;
int tmp;
for (int i = 0; i < M; i++)
{
cin >> tmp;
travel.push_back(tmp);
}
bool possible = true;
for (int i = 0; i < M - 1; i++)
{
if (getParent(travel[i]) != getParent(travel[i + 1]))
possible = false;
}
if (possible)
cout << "YES";
else
cout << "NO";
}
int main()
{
Input();
solve();
return 0;
}
후기
ㅎㅎ
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
알고스팟_ 외발 뛰기 _ 동적 계획법 (0) | 2020.04.26 |
---|---|
백준 1916번 _ 최소비용 구하기 (0) | 2020.04.26 |
백준 14502번 _ 연구소 (0) | 2020.04.25 |
백준 14501번 _ 퇴사 (0) | 2020.04.25 |
알고스팟_울타리 잘라내기_ 분할정복 (0) | 2020.04.24 |
Comments