Pagini recente » Cod sursa (job #1622933) | Cod sursa (job #1514419) | Cod sursa (job #2552236) | Cod sursa (job #581179) | Cod sursa (job #2710143)
#include <bits/stdc++.h>
#define Nmax 15002
#define cost first
#define a second.first
#define b second.second
#define triple pair <int, pair <int,int> >
using namespace std;
ifstream f("radiatie.in"); ofstream g("radiatie.out");
int n,m,k,cst,t[Nmax],h[Nmax],tQ[Nmax],pz1[Nmax],pz2[Nmax],ans[Nmax];
triple v[30002];
vector < int > Q[Nmax];
int where(int nod)
{ if(t[nod]==nod) return nod;
return t[nod]=where(t[nod]);
}
int whereQ(int nod)
{ if(tQ[nod]== nod) return nod;
return tQ[nod]=whereQ(tQ[nod]);
}
void inters(int x, int y)
{ if(h[x]>=h[y]) {t[y]=x; h[x]+=h[y];}
else {t[x] = y; h[y]+=h[x];}
int radX=whereQ(tQ[x]);
int radY=whereQ(tQ[y]);
if(Q[radX].size()< Q[radY].size()) swap(radX,radY);
for(unsigned i=0;i<Q[radY].size();++i)
{ int val=Q[radY][i];
if(whereQ(pz1[val])==radX && whereQ(pz2[val])==radY) ans[val]=cst;
else if(whereQ(pz1[val])==radY && whereQ(pz2[val])==radX) ans[val]=cst;
else Q[radX].push_back(val);
}
tQ[radY] = radX;
}
int main()
{ f>>n>>m>>k;
for(int i=1;i<=m;++i)
f>>v[i].a>>v[i].b>>v[i].cost;
sort(v+1,v+m+1);
for(int x,y,i=1;i<=k;++i)
{ f>>x>>y; pz1[i]=x; pz2[i]=y;
Q[x].push_back(i); Q[y].push_back(i);
}
for(int i=1;i<=n;++i) {t[i]=i; tQ[i]=i; h[i]=1;}
for(int i=1;i<=m;++i)
{ cst=v[i].cost;
if(where(v[i].a)!=where(v[i].b))
inters(where(v[i].a),where(v[i].b));
}
for(int i=1;i<=k;++i) g<<ans[i]<<'\n';
g.close(); f.close(); return 0;
}