MST_PRIM (G, w, r).
- 1 for (ΠΠ»Ρ) ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ u Ρ V[G]
- 2 do key [u] «- INFINITY
- 3 prev[u] «- NIL
- 4 key[r] «- 0
- 5 Q «- V[G]
- 6 while Q Π½Π΅ ΠΏΡΡΡΠ°Ρ
- 7 do u «- Extract_Min (Q)
- 8 for (ΠΠ»Ρ) ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ v Ρ Adj[u]
- 9 do if v Ρ Q ΠΈ w (u, v) < key[v]
- 10 then prev[v] «- u
- 11 key[v] «- w (u, v)
ΠΠ»ΠΎΠΊ-ΡΡ
Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
#include.
#include.
#include.
#define forn (i, n) for (int i=0;i.
using namespace std;
int n, m;
vector g[500]; //ΠΊΡΠΎΠΌΠ΅ Π²Π΅ΡΡΠΈΠ½ ΡΠΏΠΈΡΠΎΠΊ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ Ρ
ΡΠ°Π½ΠΈΡ ΠΈ Π²Π΅Ρ ΡΠ΅Π±ΡΠ°.
vector used (500,0);//Π²Π΅ΠΊΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ
Π²Π΅ΡΡΠΈΠ½.
int inf=10 000 000;
vector d (500,inf);//Π²Π΅ΠΊΡΠΎΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ.
int main ().
{.
freopen («input.txt» ," rt", stdin);
freopen («output.txt» ," wt", stdout);
cin>>n>>m;
int x, y, l;
pair temp;
forn (i, m){.
cin>>x>>y>>l;
x—;
y—;
temp.first=y;
temp.second=l;
g[x]. push_back (temp);
temp.first=x;
g[y]. push_back (temp);
}.
vector path (500);
d[0]=0;
while (true){.
int v=-1;
int dist=inf;
forn (u, n).
if (!used[u] && dist>=d[u]).
{.
v=u;
dist=d[u];
}.
if (v==-1) break;
used[v]=true;
forn (u, g[v]. size ()).
if (!used[g[v][u]. first]) {.
if (d[g[v][u]. first]>g[v][u].second) path[g[v][u]. first]=make_pair (v, g[v][u].first);
d[g[v][u]. first]=min (d[g[v][u].first], g[v][u].second);
}.
}.
long long sum=0;
forn (i, n) sum+=d[i];
cout<
forn (i, n-1).
cout<<<" «<<
return 0;
}.
ΠΡΠ΅Π½ΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠΈΠΌΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ Q. ΠΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ, ΡΠΎ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΡΡΠΎΠΊΠ°Ρ
1−5 ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π (V). Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π° while Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ |V| ΡΠ°Π·, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Extract_Min Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ Π (lg V), ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅Ρ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡ Extract__Min ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π (V*lg V). Π¦ΠΈΠΊΠ» for Π² ΡΡΡΠΎΠΊΠ°Ρ
8−11 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π (Π) ΡΠ°Π·, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΌΠΌΠ° Π΄Π»ΠΈΠ½ Π²ΡΠ΅Ρ
ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π²Π½Π° 2|Π|. ΠΠ½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° for ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ Q Π² ΡΡΡΠΎΠΊΠ΅ 9 ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π·Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ Π±ΠΈΡΠΎΠΌ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΌ, Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΎΠ½Π° Π² Q, ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΡΠΎΡ Π±ΠΈΡ ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΠ· Q. ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΠΎΠΊΠ΅ 11 Π½Π΅ΡΠ²Π½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Decrease_Key Π½Π°Π΄ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄ΠΎΠΉ. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ — Π (lg V). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠΈΠΌΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ o (V * lg V + Π * lg V) = o (Π * lg V), ΡΡΠΎ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΡΡΠΊΠ°Π»Π°.