Pagini recente » Cod sursa (job #1711445) | Cod sursa (job #2065913) | Cod sursa (job #1775218) | Monitorul de evaluare | Cod sursa (job #3330031)
#include <iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;int n,m,q,tata[15001],rnk[15001],rsp[15001],a,b,i,val;set<int>s[15001];
struct qer{int val,a,b;}v[30001];
struct comp{
bool operator()(const qer &a,const qer &b){
return a.val<b.val;
}
};
int fnd(int nod){
if(tata[nod]==nod)return nod;
return tata[nod]=fnd(tata[nod]);
}
void unite(int a,int b){
a=fnd(a);b=fnd(b);
if(a==b)return;
if(rnk[a]>rnk[b])swap(a,b);
if(rnk[a]==rnk[b])rnk[b]++;
tata[a]=b;
for(auto x:s[a]){
if(s[b].find(x)==s[b].end())s[b].insert(x);
else rsp[x]=val;
}
s[a].clear();
}
ifstream fin("radiatie.in");ofstream fout("radiatie.out");
int main(){
fin>>n>>m>>q;for(i=1;i<=n;i++){tata[i]=i;rnk[i]=1;}
for(i=1;i<=m;i++)fin>>v[i].a>>v[i].b>>v[i].val;
sort(v+1,v+m+1,comp());
for(i=1;i<=q;i++){
fin>>a>>b;
s[a].insert(i);
s[b].insert(i);
}
for(i=1;i<=m;i++){
a=v[i].a;
b=v[i].b;
val=v[i].val;
for(auto x:s[a])cout<<x<<' ';cout<<'\n';
for(auto x:s[b])cout<<x<<' ';cout<<'\n';
cout<<'\n';
unite(a,b);
}
for(i=1;i<=q;i++)fout<<rsp[i]<<'\n';
}