Pagini recente » Cod sursa (job #2259125) | Cod sursa (job #1802868) | Cod sursa (job #1501450) | Cod sursa (job #2650959) | Cod sursa (job #3331436)
#include <bits/stdc++.h>
using namespace std;
const int N=15005, M=3e4+5;
int parent[N],ans[N];
set<int>s[N];
tuple<int,int,int>edges[M];
int findparent(int x) {
if (parent[x]==x) {
return x;
}
return parent[x]=findparent(parent[x]);
}
void unite(int i) {
auto [w,a,b]=edges[i];
a=findparent(a);
b=findparent(b);
if (a==b)return;
if (s[b].size()>s[a].size())swap(a,b);
for (auto x:s[b]) {
if (s[a].find(x)!=s[a].end()) {
ans[x]=w;
s[a].erase(x);
}
else {
s[a].insert(x);
}
}
parent[b]=a;
s[b].clear();
}
signed main() {
for (int i=1;i<N;i++) {
parent[i]=i;
}
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,m,k;cin>>n>>m>>k;
for (int i=0;i<m;i++) {
int u,v,w;cin>>u>>v>>w;
edges[i]={w,u,v};
}
for (int i=0;i<k;i++) {
int a,b;cin>>a>>b;
s[a].insert(i);
s[b].insert(i);
}
sort(edges, edges+m);
for (int i=0;i<m;i++) {
unite(i);
}
for (int i=0;i<k;i++) {
cout<<ans[i]<<'\n';
}
return 0;
}