Pagini recente » Cod sursa (job #2436923) | Cod sursa (job #1436107) | Cod sursa (job #577318) | Cod sursa (job #280408) | Cod sursa (job #2763146)
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 15005
using namespace std;
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
struct muchie
{
int x,y,c;
friend bool operator < (const muchie& a, const muchie& b)
{
return a.c<b.c;
}
}aux;
int n,m,k;
int sef[NMAX],ad[NMAX];
pair <int,int> t[NMAX];
vector <muchie> e;
vector <muchie> arb;
vector < pair <int, int> > adj[NMAX];
int sef_sup(int nod)
{
if(sef[nod]!=nod)
return sef[nod]=sef_sup(sef[nod]);
else
return nod;
}
void unire(int nod1, int nod2)
{
sef[sef_sup(nod1)]=sef_sup(nod2);
}
void apm()
{
sort(e.begin(),e.end());
for(int i=1;i<=n;i++)
sef[i]=i;
for(int i=0;i<e.size();i++)
{
aux=e[i];
if(sef_sup(aux.x)!=sef_sup(aux.y))
{
unire(aux.x,aux.y);
arb.push_back(aux);
}
}
}
void dfs(int nod, int tata)
{
ad[nod]=ad[tata]+1;
for(pair <int,int> v : adj[nod])
if(v.second!=tata)
{
dfs(v.second,nod);
t[v.second]={v.first,nod};
}
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
cin>>aux.x>>aux.y>>aux.c;
e.push_back(aux);
}
apm();
for(int i=0;i<arb.size();i++)
{
aux=arb[i];
adj[aux.x].push_back({aux.c,aux.y});
adj[aux.y].push_back({aux.c,aux.x});
}
dfs(1,0);
for(int i=1;i<=k;i++)
{
int x,y,rasp=-1;
cin>>x>>y;
while(ad[x]>ad[y])
{
rasp=max(rasp,t[x].first);
x=t[x].second;
}
while(ad[x]<ad[y])
{
rasp=max(rasp,t[y].first);
y=t[y].second;
}
while(x!=y)
{
rasp=max(rasp,t[x].first);
x=t[x].second;
rasp=max(rasp,t[y].first);
y=t[y].second;
}
cout<<rasp<<'\n';
}
return 0;
}