Pagini recente »
Diferențe pentru utilizator/tzepu între reviziile 139 și 140
|
Despre mine
|
Istoria paginii utilizator/alexsandulescu
|
Monitorul de evaluare
|
Cod sursă (job #521853)
Cod sursă (job
#521853)
#include <bits/stdc++.h>
using namespace std;
ifstream in("zapada.in");
ofstream out("zapada.out");
int n,m,k,p[10100],a,b,z,cr,cmin;
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 main()
{
in>>n>>m>>k;
for(int i=1;i<=m;i++)
{
in>>a>>b>>z;
s.insert({a,b,z});
}
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;
}
out<<cmin<<'\n';
for(int i=1;i<=k;i++)
{
in>>a>>b>>z;
s.insert({a,b,z});
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;
}
out<<cmin<<'\n';
}
return 0;
}