Pagini recente »
Rating Olteanu Petru (olteanupetru02)
|
2015-02-17-clasa-8-tema-19
|
Clasament 2015-03-04-test2-7
|
Rating Nitoiu Evelina (evelina)
|
Cod sursă (job #675982)
Cod sursă (job
#675982)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin("kruskal.in");
ofstream fout("kruskal.out");
/**
6 9
1 2 3
1 3 1
1 4 8
1 6 3
2 3 4
3 4 3
4 5 4
4 6 6
5 6 2
*/
struct Muchie
{
int x,y,cost;
};
int t[nmax],n,m,sol,k;
Muchie a[100005];
bool Cmp(Muchie A,Muchie B)
{
return A.cost<B.cost;
}
/// unifica radacinile x si y
void Union(int x,int y)
{
t[y]=x;
}
/// Complexitate O(log*n)
int Find(int x)
{
int y,rad=x;
while(t[rad]!=0)
rad=t[rad];
/// compresie drum
while(x!=rad)
{
y=t[x];
t[x]=rad;
x=y;
}
return rad;
}
int Rezolvare(Muchie a[],int m)
{
int i,j,x,y;
sol=0;
sort(a+1,a+m+1,Cmp);
for(i=1;i<=n;i++)
t[i]=0;
for (i=1;i<=m;i++)
{
x=Find(a[i].x);
y=Find(a[i].y);
if (x!=y)
{
Union(x,y);
sol+=a[i].cost;
}
}
return sol;
}
int main()
{
int i,x,y,z;
fin>>n>>m>>k;
for (i=1;i<=m;i++)
fin>>a[i].x>>a[i].y>>a[i].cost;
fout<<Rezolvare(a,m)<<"\n";
for(i=1;i<=k;i++)
{
fin>>x>>y>>z;
m++;
a[m].x=x;
a[m].y=y;
a[m].cost=z;
fout<<Rezolvare(a,m)<<"\n";
}
fin.close();
fout.close();
return 0;
}