Pagini recente »
Borderou de evaluare (job #575087)
|
Borderou de evaluare (job #804948)
|
Cod sursă (job #521788)
|
Istoria paginii runda/2014-12-02-clasa-8-tema-11
|
Cod sursă (job #521957)
Cod sursă (job
#521957)
#include <bits/stdc++.h>
using namespace std;
ifstream in("zapada.in");
ofstream out("zapada.out");
int n,m,k,p[10001],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(bool first)
{
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(first==1) temp.push_back({it.x,it.y,it.c});
}
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(1)<<'\n';
s.clear();
for(auto it:temp)
s.insert(it);
temp.clear();
for(int i=1;i<=k;i++)
{
in>>a>>b>>z;
s.insert({a,b,z});
out<<kruskal(0)<<'\n';
}
return 0;
}