[백준] 14621번 나만 안되는 연애 C++ 코드

2024. 10. 16. 12:36· 백준
목차
  1. 코드
  2. 풀이

코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

int n, m, lst[1003], u, v, d, cnt, res;
char uv[1003]; // 대학교 성별 저장

vector<pair<int, pair<int, int>>> adj; // 길 저장

// 유니온 파인드 for 크루스칼

int find(int x) {
	if (x == lst[x]) return x;
	return lst[x] = find(lst[x]);
}

void merge(int x, int y) {
	x = find(x);
	y = find(y);
	if (x > y) lst[x] = y;
	else lst[y] = x;
}

// 비용 순 정렬
bool cmp(pair<int, pair<int, int>> a, pair<int, pair<int, int>> b) {
	return a.first < b.first;
}

void FASTIO() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
}

int main() {
	FASTIO();
	cin >> n >> m;
	for (int i = 1; i < n + 1; i++) {
		cin >> uv[i];
		lst[i] = i;
	}
	for (int i = 0; i < m; i++) {
		cin >> u >> v >> d;
		adj.push_back({ d, {u, v} });
	}
	sort(adj.begin(), adj.end(), cmp);
	for (int i = 0; i < adj.size(); i++) {
		int from = adj[i].second.first;
		int to = adj[i].second.second;
		int cost = adj[i].first;
		if (find(from) != find(to) && uv[from] != uv[to]) {
			merge(from, to);
			cnt++;
			res += cost;
		}
	}
    // 길은 n - 1개
    // n - 1가 아닌 경우는 길을 만들 수 없는 경우
	if (cnt != (n - 1)) res = -1;
	cout << res << '\n';
	return 0;
}

풀이

대학교마다 길을 최소비용으로 연결하는 문제이다. 조건이 하나 추가되었는데, 남초는 여초랑 연결, 여초는 남초랑 연결되어야 한다는 점이다. 따라서 크루스칼 알고리즘을 이용하여 두 지점이 연결되었는지 확인할 때 대학교가 다른지도 검사하면 된다.

 

최소스패닝트리에서 길은 n - 1 (n은 노드의 수)개 만들어진다. n - 1개가 아니라면 길을 만들 수 없는 경우이므로 문제에서 준 조건대로 -1을 출력하면 된다.

'백준' 카테고리의 다른 글

[백준] 2665번 미로만들기 C++ 코드  (1) 2024.10.17
[백준] 6497번 전력난 C++ 코드  (3) 2024.10.16
[백준] 9417번 최대 GCD C++ 코드  (3) 2024.10.16
[백준] 17298번 오큰수 C++ 코드  (1) 2024.10.15
[백준] 16236번 아기 상어 C++ 코드  (1) 2024.10.11
  1. 코드
  2. 풀이
'백준' 카테고리의 다른 글
  • [백준] 2665번 미로만들기 C++ 코드
  • [백준] 6497번 전력난 C++ 코드
  • [백준] 9417번 최대 GCD C++ 코드
  • [백준] 17298번 오큰수 C++ 코드
Melon Man
Melon Man
Hello World
Melon Man
제발 CPU는 집에서 만들어 씁시다
Melon Man
전체
오늘
어제
  • 분류 전체보기 (644)
    • 직접 만들어 보기 (2)
    • 가내공업 (2)
    • HTML (0)
    • CSS (4)
    • JAVASCRIPT (51)
    • TYPESCRIPT (14)
    • NODE.JS (19)
    • REACT (7)
    • NEXT.JS (1)
    • REACT NATIVE (5)
    • REDUX (2)
    • PYTHON (17)
    • 자료구조 및 알고리즘 (35)
    • 컴퓨터 구조 (9)
    • 운영체제 (7)
    • NETWORK (3)
    • CodeUp 기본 100제 - Python (98)
    • 잡지식 (1)
    • 백준 (347)
    • SWEA (0)
    • GIT (4)
    • C (2)
    • C++ (11)
    • JAVA (2)
    • 객체지향프로그래밍 (0)
    • 정보처리기사 (1)
    • 프로그래머스_SQL (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • python
  • CodeUp
  • React
  • 표준내장객체
  • TypeScript
  • 위상정렬
  • 자바스크립트
  • input
  • 입출력
  • 유니온 파인드
  • node.js
  • 백준
  • 입문
  • 함수
  • 기초
  • standard built-in object
  • 파이썬
  • event
  • BFS
  • Node
  • 알고리즘
  • 운영체제
  • mdn
  • 초보
  • C++
  • 코드업
  • 자료구조
  • javascript
  • 다익스트라 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
Melon Man
[백준] 14621번 나만 안되는 연애 C++ 코드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.