Pagini recente »
Istoria paginii runda/2013-03-22-test-6-7-8/clasament
|
Istoria paginii runda/simulare_4
|
Istoria paginii runda/2014-11-18-test-5/clasament
|
Profil Horia_haivas
|
Cod sursă (job #804508)
Cod sursă (job
#804508)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zapada.in");
ofstream fout("zapada.out");
int n, m, k, t[10001], r[10001];
struct muchie
{
int x, y, c;
bool operator < (muchie m) const
{
return c < m.c;
}
};
muchie a[100001];
int Find(int x)
{
int y;
if (t[x] == 0)
return x;
y = Find(t[x]);
t[x] = y;
return y;
}
void Union(int x, int y)
{
if (r[x] > r[y])
{
t[y] = x;
r[x] += r[y];
}
else
{
t[x] = y;
r[y] += r[x];
}
}
int main()
{
int i, j, x, y, suma = 0, M;
fin >> n >> m >> k;
for (i = 1 ; i <= m ; i++)
fin >> a[i].x >> a[i].y >> a[i].c;
sort (a + 1, a + m + 1);
for (i = 1 ; i <= m ; i++)
{
x = Find(a[i].x);
y = Find(a[i].y);
if (x != y)
{
Union(x, y);
suma += a[i].c;
}
}
fout << suma << "\n";
for (i = 1 ; i <= k ; i++)
{
suma = 0;
for (j = 1 ; j <= n ; j++)
{
t[j] = 0;
r[j] = 1;
}
fin >> a[m+i].x >> a[m+i].y >> a[m+i].c;
M = m + i;
sort(a + 1, a + M + 1);
for (j = 1 ; j <= M ; j++)
{
x = Find(a[j].x);
y = Find(a[j].y);
if (x != y)
{
Union(x, y);
suma += a[j].c;
}
}
fout << suma << "\n";
}
return 0;
}