๋ฌธ์
์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M; //N=ํ๊ต์ ์(๋
ธ๋) M=๋๋ก์ ์(๊ฐ์ )
int parent[1001];
char gender[1001];
int ans = 0;
bool flag[1001];
vector<pair<int, pair<int, int>>> edges;
int findParent(int x) {
if (x == parent[x]) return x;
else return x = findParent(parent[x]);
}
void unionParent(int a, int b) {
a = findParent(a);
b = findParent(b);
if (a < b) parent[b] = a;
else parent[a] = b;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
for (int i = 1; i <= N; i++) { //๋ถ๋ชจํ
์ด๋ธ ์์์ ๋ถ๋ชจ๋ฅผ ์๊ธฐ์์ ์ผ๋ก ์ด๊ธฐํ ๋ฐ ์ฑ๋ณ์ ๋ณด ์
๋ ฅ
char sex; cin >> sex;
parent[i] = i;
gender[i] = sex;
}
for (int i = 0; i < M; i++) {
int u, v, d; cin >> u >> v >> d;
edges.push_back({ d,{u,v} }); //๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด ๊ฑฐ๋ฆฌ๋ฅผ ํํ์ ์ฒซ๋ฒ์งธ ์์๋ก ์
๋ ฅ
}
sort(edges.begin(), edges.end());
for (int i = 0; i < edges.size(); i++) {
int cost = edges[i].first;
int a = edges[i].second.first;
int b = edges[i].second.second;
if (gender[a] == gender[b]) continue; //์ฑ๋ณ์ด ๊ฐ์ผ๋ฉด ๋ฌด์
if (findParent(a) != findParent(b)) {
ans += cost;
unionParent(a, b);
flag[a] = flag[b] = true; //ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ผ๋ TRUE์ฒ๋ฆฌ
}
}
for (int i = 1; i <= N; i++) { //ํ๋ฒ์ด๋ผ๋ ๋ฐฉ๋ฌธ ํ์ง ์์ ๋
ธ๋๊ฐ ์๋ค๋ฉด ์ฐ๊ฒฐx
if (!flag[i]) {
cout << -1;
return 0;
}
}
cout << ans;
return 0;
}
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 14698๋ฒ - ์ ์ํ๋๋ ์ฌ๋ผ์ ์ฐ๊ตฌ์์๋ ๊ฑด์ ๋ํ์ฌ(Hard) (0) | 2021.11.11 |
---|---|
[๋ฐฑ์ค,c++] 14681๋ฒ - ์ฌ๋ถ๋ฉด ๊ณ ๋ฅด๊ธฐ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 1463๋ฒ - 1๋ก ๋ง๋ค๊ธฐ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14588๋ฒ - Line Friends (Small) (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14567๋ฒ - ์ ์๊ณผ๋ชฉ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14563๋ฒ - ์์ ์ (0) | 2021.11.11 |
๋๊ธ