Pagini recente » Cod sursa (job #2375664) | Cod sursa (job #209947) | Cod sursa (job #2795024) | Cod sursa (job #3281025) | Cod sursa (job #3040894)
#include <fstream>
#include <set>
#include <algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct Edge
{
int x, y, c;
};
struct Query
{
int x, y;
};
int n, m, k, i, dsu[15100];
set<int> smalltolarge[15100];
Edge edges[30100];
Query queries[15100];
int qans[15100];
int dsuGetRoot (int node)
{
if (!dsu[node])
return node;
return dsu[node] = dsuGetRoot(dsu[node]);
}
void dsuMerge (int a, int b)
{
a = dsuGetRoot(a);
b = dsuGetRoot(b);
if (a != b) {
if (smalltolarge[a].size() <= smalltolarge[b].size()) {
while (!smalltolarge[a].empty()) {
int q = (*smalltolarge[a].begin());
smalltolarge[a].erase(smalltolarge[a].begin());
if (smalltolarge[b].count(q)) {
smalltolarge[b].erase(q);
qans[q] = edges[i].c;
}
else {
smalltolarge[b].insert(q);
}
}
dsu[a] = b;
}
else {
while (!smalltolarge[b].empty()) {
int q = (*smalltolarge[b].begin());
smalltolarge[b].erase(smalltolarge[b].begin());
if (smalltolarge[a].count(q)) {
smalltolarge[a].erase(q);
qans[q] = edges[i].c;
}
else {
smalltolarge[a].insert(q);
}
}
dsu[b] = a;
}
}
}
bool edgeCmp (const Edge &a, const Edge &b)
{
if (a.c < b.c)
return true;
return false;
}
int main()
{
f >> n >> m >> k;
for (i = 1; i <= m; i++) {
f >> edges[i].x >> edges[i].y >> edges[i].c;
}
for (i = 1; i <= k; i++) {
f >> queries[i].x >> queries[i].y;
smalltolarge[queries[i].x].insert(i);
smalltolarge[queries[i].y].insert(i);
}
sort(edges+1, edges+m+1, edgeCmp);
for (i = 1; i <= m; i++) {
dsuMerge(edges[i].x, edges[i].y);
}
for (i = 1; i <= k; i++) {
g << qans[i] << '\n';
}
f.close();
g.close();
return 0;
}