Pagini recente » Cod sursa (job #2127593) | Cod sursa (job #318662) | Cod sursa (job #2791654) | Cod sursa (job #1717677) | Cod sursa (job #1614681)
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 15010
#define x first
#define y second.first
#define cost second.second
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n, m, queriesCount;
int parent[DIM], lenght[DIM], level[DIM];
pair<int, pair<int, int> > edges[2 * DIM];
vector<int> apm[DIM];
bool cmp(const pair<int, pair<int, int> > &a, const pair<int, pair<int, int> > &b) {
return a.cost < b.cost;
}
int root(int node) {
while (parent[node] > 0)
node = parent[node];
return node;
}
void DFS(int node, int lvl)
{
level[node] = lvl;
for (int i = 0; i < apm[node].size(); i++) {
int child = apm[node][i];
DFS(child, lvl + 1);
}
}
int main() {
fin >> n >> m >> queriesCount;
for (int i = 1; i <= m; i++)
fin >> edges[i].x >> edges[i].y >> edges[i].cost;
sort(edges + 1, edges + m + 1, cmp);
for (int i = 1; i <= n; i++)
parent[i] = -1;
int rootAPM = 1;
for (int i = 1; i <= m; i++) {
int rootx = root(edges[i].x);
int rooty = root(edges[i].y);
if (rootx == rooty)
continue;
if (parent[rootx] <= parent[rooty]) {
parent[rootx] += parent[rooty];
parent[rooty] = rootx;
lenght[rooty] = edges[i].cost;
apm[rootx].push_back(rooty);
rootAPM = rootx;
}
else {
parent[rooty] += parent[rootx];
parent[rootx] = rooty;
lenght[rootx] = edges[i].cost;
apm[rooty].push_back(rootx);
rootAPM = rooty;
}
}
DFS(rootAPM, 1);
while (queriesCount--) {
int node1, node2;
fin >> node1 >> node2;
int solution = 0;
while (level[node1] > level[node2]) {
solution = max(solution, lenght[node1]);
node1 = parent[node1];
}
while (level[node1] < level[node2]) {
solution = max(solution, lenght[node2]);
node2 = parent[node2];
}
while (node1 != node2) {
solution = max(solution, lenght[node1]);
solution = max(solution, lenght[node2]);
node1 = parent[node1];
node2 = parent[node2];
}
fout << solution << "\n";
}
return 0;
}
//Miriam e tare!