Pagini recente »
Borderou de evaluare (job #565547)
|
Cod sursă (job #819689)
|
Cod sursă (job #661415)
|
Cod sursă (job #819788)
|
Cod sursă (job #365484)
Cod sursă (job
#365484)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("zapada.in");
ofstream g ("zapada.out");
struct nod
{
int x, c;
nod *leg;
};
struct muchie
{
int i, j, c;
};
nod *v[10001];
muchie m[100001];
bool S[100001];
int CC[10001];
int N, M, K;
void add (nod *&dest, int x, int c)
{
nod *p;
p = new nod;
p->x = x;
p->c = c;
p->leg = dest;
dest = p;
}
void citire()
{
f >> N >> M >> K;
for (int i = 1; i <= M; i++)
{
f >> m[i].i >> m[i].j >> m[i].c;
//add (v[x], y, c);
//add (v[y], x, c);
}
}
bool comp (const muchie &a, const muchie &b)
{
return a.c < b.c;
}
int Kruskal (int nrm)
{
int cost = 0;
int poz = 0;
sort (m + 1, m + nrm + 1, comp);
for (int i = 1; i <= N; i++)
{
CC[i] = i;
S[i] = 0;
}
for (int l = 1; l < N; l++)
{
int k = poz;
do
{
k++;
}
while (CC[m[k].i] == CC[m[k].j]);
S[k] = 1;
cost += m[k].c;
poz = k;
int ccj = m[k].j;
for (int i = 1; i <= N; i++)
if (CC[i] == ccj)
CC[i] = CC[m[k].i];
}
return cost;
}
int main()
{
citire();
g << Kruskal (M) << '\n';
int nrm = M;
int MK = M + K;
for (int i = M + 1; i <= MK; i++)
{
f >> m[i].i >> m[i].j >> m[i].c;
nrm++;
g << Kruskal (nrm) << '\n';
}
return 0;
}