Pagini recente »
Rating Snake 117 (NicuSavva)
|
Cod sursă (job #633925)
|
Borderou de evaluare (job #486579)
|
Istoria paginii runda/11_lmk_vs
|
Cod sursă (job #521951)
Cod sursă (job
#521951)
#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;
vector<zapada> temp;
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++;
temp.push_back({it.x,it.y,it.c});
}
if(cr==n-1) break;
}
s.clear();
for(auto it:temp)
s.insert(it);
temp.clear();
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;
}