Pagini recente »
Istoria paginii runda/baraj-sumen-2015-seniori
|
Istoria paginii runda/concurs9_04_12_2020/clasament
|
Istoria paginii runda/concurs704
|
Cod sursă (job #399977)
|
Cod sursă (job #521865)
Cod sursă (job
#521865)
#include <bits/stdc++.h>
using namespace std;
ifstream in("zapada.in");
ofstream out("zapada.out");
int n,m,k,p[10100],a,b,z;
struct zapada
{
int x,y,c;
bool operator<(const zapada &aux) const
{
return c<aux.c;
}
};
multiset<zapada> s;
int find(int x)
{
int r=x;
while(p[r]!=r) r=p[r];
while(p[x]!=r)
{
int aux=p[x];
p[x]=r;
x=p[x];
}
return r;
}
void Union(int x,int y)
{
int rx=find(x);
int ry=find(y);
if(rx!=ry) p[rx]=ry;
}
int kruskal()
{
int cr=0,cmin=0;
for(int i=1;i<=n;i++) p[i]=i;
for(auto it:s)
{
if(find(it.x)!=find(it.y))
{
Union(it.x,it.y);
cmin+=it.c;
cr++;
}
if(cr==n-1) break;
}
return cmin;
}
int main()
{
in>>n>>m>>k;
for(int i=1;i<=m;i++)
{
in>>a>>b>>z;
s.insert({a,b,z});
}
out<<kruskal()<<'\n';
for(int i=1;i<=k;i++)
{
in>>a>>b>>z;
s.insert({a,b,z});
out<<kruskal()<<'\n';
}
return 0;
}