Pagini recente » Cod sursa (job #1577569) | Cod sursa (job #780453) | Cod sursa (job #2726501) | Cod sursa (job #873013) | Cod sursa (job #3335142)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
const int nmax = 15005;
int radacina(int nod);
int n, m, k, tata[nmax], ans[nmax];
set<int> q[nmax];
struct ura
{
int x, y, c;
};
vector<ura> muchii;
bool cmp(ura a, ura b)
{
return a.c < b.c;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fin>>n>>m>>k;
for(int i = 1; i <= n; ++i)
tata[i] = i;
for(int i = 1; i <= m; ++i)
{
int x, y, c;
fin>>x>>y>>c;
muchii.push_back({x, y, c});
}
sort(muchii.begin(), muchii.end(), cmp);
for(int i = 1; i <= k; ++i)
{
int x, y;
fin>>x>>y;
q[x].insert(i);
q[y].insert(i);
}
for(int i = 0; i < m; ++i)
{
int rx = radacina(muchii[i].x), ry = radacina(muchii[i].y), cost = muchii[i].c;
if(rx == ry)
continue;
auto it = q[rx].begin();
while (it != q[rx].end())
{
int query = *it;
if (q[ry].find(query) != q[ry].end())
{
ans[query] = cost;
q[ry].erase(query);
it = q[rx].erase(it);
}
else
{
++it;
}
}
for(auto query : q[ry])
{
q[rx].insert(query);
}
q[ry].clear();
tata[ry] = rx;
}
for(int i = 1; i <= k; ++i)
fout<<ans[i]<<"\n";
return 0;
}
int radacina(int nod)
{
int r = nod;
while(tata[r] != r)
r = tata[r];
while(tata[nod] != nod)
{
int aux = nod;
nod = tata[nod];
tata[aux] = r;
}
return r;
}