Pagini recente » Cod sursa (job #1408691) | Cod sursa (job #697061) | Cod sursa (job #209153) | Cod sursa (job #2121558) | Cod sursa (job #2447342)
#include<bits/stdc++.h>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
int n, m, k;
struct mch
{
int a, b, c;
};
mch v[30002];
bool cmp(mch a, mch b)
{
return a.c < b.c;
}
vector<int>dsu[15002];
int tt[15002], ttv[15002], sz[15002], pz1[15002], pz2[15002];
int ans[15002];
int Find(int nod)
{
if(tt[nod] == nod)
return nod;
return tt[nod] = Find(tt[nod]);
}
int Find2(int nod)
{
if(ttv[nod] == nod)
return ttv[nod];
return ttv[nod] = Find2(ttv[nod]);
}
int cost;
void Union(int a, int b)
{
int nnv, nl;
if(sz[a] >= sz[b])
tt[b] = a, sz[a] += sz[b];
else
tt[a] = b, sz[b] += sz[a];
if(dsu[ttv[a]].size() >= dsu[ttv[b]].size())
nl = ttv[a], nnv = ttv[b], ttv[b] = ttv[a];
else
nl = ttv[b], nnv = ttv[a], ttv[a] = ttv[b];
for(int i = 0; i < dsu[nnv].size(); ++i)
{
int val = dsu[nnv][i];
if(Find2(pz1[val]) == Find2(pz2[val]))
ans[val] = cost;
else
dsu[nl].push_back(val);
}
}
int main()
{
f >> n >> m >> k;
for(int i = 1; i <= m; ++i)
f >> v[i].a >> v[i].b >> v[i].c;
sort(v+1, v+m+1, cmp);
for(int i = 1; i <= k; ++i)
{
int a, b;
f >> a >> b;
pz1[i] = a;
pz2[i] = b;
dsu[a].push_back(i);
dsu[b].push_back(i);
}
for(int i = 1; i <= n; ++i)
tt[i] = i, ttv[i] = i, sz[i] = 1;
for(int i = 1; i <= m; ++i)
{
cost = v[i].c;
if(Find(v[i].a) != Find(v[i].b))
Union(Find(v[i].a), Find(v[i].b));
}
for(int i = 1; i <= k; ++i)
g << ans[i] << '\n';
return 0;
}