Cod sursa(job #3169459)

Utilizator Dragos13Dragos Dragos13 Data 15 noiembrie 2023 00:21:08
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream in("apm2.in");
ofstream out("apm2.out");

vector<vector<int>>ls, apm;
int tata[10005], h[10005];

int radacina(int u) {

	if (tata[u] == 0)
		return u;
	return tata[u] = radacina(tata[u]);
}

void reuniune(int u, int v) {
	int ru, rv;
	ru = radacina(u);
	rv = radacina(v);
	if (h[ru] < h[rv])
	{
		tata[ru] = rv;
	}
	else {
		tata[rv] = ru;
		if (h[ru] == h[rv])
			h[rv]++;
	}
}

int main() {
	int n, t = 0, m,q;
	in >> n >> m>>q;
	while (m--) {
		int a, b, c;
		in >> a >> b >> c;
		ls.push_back({ c,a,b });

	}
	sort(ls.begin(), ls.end());
	
	for (int i = 0; i < q; i++)
	{

		int a, b;
		in >> a >> b;
		for (auto v : ls) {
			if (radacina(v[1]) != radacina(v[2])) {

				reuniune(v[1], v[2]);
			}
			if (radacina(a) == radacina(b))
			{
				out << v[0]-1 << "\n";
				break;
			}
		}
		memset(tata, 0, sizeof(tata) );
		memset(h, 0, sizeof(h) );
	}
	
	return 0;
}