Pagini recente »
Istoria paginii utilizator/lolpop4567
|
Istoria paginii utilizator/mihaicraciun96
|
Istoria paginii utilizator/ghostdealer
|
Istoria paginii utilizator/ceorno
|
Cod sursă (job #520989)
Cod sursă (job
#520989)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NMAX 110005
using namespace std;
ifstream fin("zapada.in");
ofstream fout("zapada.out");
pair < int , pair < int , int > > pr[NMAX];
int ds[NMAX], N, M, K, minCost;
void init()
{
for(int i = 1; i <= N; i++){
ds[i] = i;
}
}
int root(int x)
{
while(x != ds[x]){
ds[x] = ds[ds[x]];
x = ds[x];
}
return x;
}
void Union(int x, int y)
{
int px = root(x);
int py = root(y);
ds[px] = ds[py];
}
int Krusk()
{
int c, x, y;
for(int i = 1; i <= M; i++){
x = pr[i].second.first;
y = pr[i].second.second;
c = pr[i].first;
if(root(x) != root(y)){
minCost += c;
Union(x,y);
}
}
return minCost;
}
int main()
{
int x, y, c;
fin >> N >> M >> K;
for(int i = 1; i <= M; i++){
fin >> x >> y >> c;
pr[i] = make_pair(c,make_pair(x,y));
}
sort(pr + 1, pr + M + 1);
init();
fout << Krusk() << "\n";
for(int i = 1; i <= K; i++){
minCost = 0;
fin >> x >> y >> c;
pr[M + i] = make_pair(c,make_pair(x,y));
sort(pr + 1, pr + M + 1 + i);
init();
fout << Krusk() << "\n";
}
return 0;
}