Min Cost to Connect All Points – Algorytm Find And Union / Minimalne Drzewo Rozpinające

Szczegółowe omówienie zadania Min Cost to Connect All Points:

Link do powyższego omówienia zadania Min Cost to Connect All Points: https://youtu.be/jOqGMOGJQ1s?t=1117
Omówienie kodu który zadania Min Cost to Connect All Points: https://youtu.be/jOqGMOGJQ1s?t=4744

Link do treści zadania Min Cost to Connect All Points i możliwości umieszczania rozwiązań: https://leetcode.com/problems/min-cost-to-connect-all-points/


Zadanie pokazuje algorytm Find And Union: https://youtu.be/jOqGMOGJQ1s?t=2036


Zadanie z LeetCode – platformy która zawiera zadania z interview / rozmów kwalifikacyjnych do Google, Facebook, Amazon: https://youtu.be/jOqGMOGJQ1s?t=17


Jak się uczyć na podstawie tego zadania? https://youtu.be/QgLyXYmFQeU?t=2019
Pamiętaj by zajrzeć max 1 raz – wtedy się rozwijasz: https://youtu.be/pkLXuuOe_qA?t=3625

Lista zadań z rozwiązaniami: https://oki.org.pl/lista-zadan-materialy.php
Samouczek – przygotowanie do Olimpiad: https://oki.org.pl/tutorial/

Zajęcia: https://oki.org.pl/harmonogram-zajec/
Informacje o zajęciach: https://oki.org.pl/newsletter.php

Warto startować w Olimpiadzie Informatycznej!
https://youtu.be/K7fZfJ8nN6A?t=109


Kod C++ programu "Min Cost to Connect All Points", który jest omówiony w powyższym filmie i który otrzymuje 100%


class Solution {
public:
int rep[1007];
int Find(int v) {
if (rep[v] != v)
rep[v] = Find(rep[v]);
return rep[v];
}
void Union(int u, int v) {
int a = Find(u);
int b = Find(v);
rep[a] = b;
}
int minCostConnectPoints(vector<vector<int>>& points) {
vector<pair<int, pair<int, int>>> kraw;
for (int i = 0; i < points.size(); ++i) {
for (int j = i + 1; j < points.size(); ++j) {
int d = abs(points[i][0] - points[j][0])
+ abs(points[i][1] - points[j][1]);
kraw.push_back({d, {i, j}});
}
}
sort(kraw.begin(), kraw.end());
for (int i = 0; i < points.size(); ++i)
rep[i] = i;
int wynik = 0;
for (int i = 0; i < kraw.size(); ++i) {
int d = kraw[i].first;
int u = kraw[i].second.first;
int v = kraw[i].second.second;
if (Find(u) != Find(v)) {
wynik += d;
Union(u, v);
}
}
return wynik;
}
};
Kod C++ programu "Min Cost to Connect All Points", który jest omówiony w powyższym filmie i który otrzymuje 100%

 


Kod Python programu Min Cost to Connect All Points, który otrzymuje 100%:

class Solution:
rep = []
def Find(self, v):
if (self.rep[v] != v):
self.rep[v] = self.Find(self.rep[v])
return self.rep[v]
def Union(self, u, v):
a = self.Find(u)
b = self.Find(v)
self.rep[a] = b
def minCostConnectPoints(self, points: List[List[int]]) -> int:
self.rep = [i for i in range(len(points))]
kraw = []
for i in range(len(points)):
for j in range(i+1, len(points)):
d = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1])
kraw.append([d, i, j])
kraw.sort()
wynik = 0
for d, u, v in kraw:
if (self.Find(u) != self.Find(v)):
wynik += d
self.Union(u, v)
return wynik

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz