Pagini recente » Cod sursa (job #2134334) | Cod sursa (job #2886528) | Cod sursa (job #3135526) | Cod sursa (job #1562183) | Cod sursa (job #2374137)
#include <bits/stdc++.h>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
vector <int>v[15003],d[15003];
struct muchie
{
int a,b,c;
}m[30003];
bool cmp(muchie x12,muchie y12)
{
return x12.c<y12.c;
}
int n,mu,k,ind=1,mf,t[15003],ad[15003],ok,sf,in;
bool ap[15003];
int Root(int p)
{
int q=p;
while(q!=t[q])q=t[q];
while(p!=t[p])
{
int aux=t[p];
t[p]=q;
p=aux;
}
return q;
}
void Unite(int p,int q)
{
if(ad[p]>ad[q])
{
t[q]=p;
}
else t[p]=q;
if(ad[p]==ad[q])ad[q]++;
}
void DFS(int nod,int Max)
{
if(ok)
{
ap[nod]=1;
if(nod==sf)
{
g<<Max<<'\n';
ok=0;
}
else
{
int nr=v[nod].size();
for(int i=0;i<nr;++i)
{
if(!ap[v[nod][i]])
{
ap[v[nod][i]]=1;
DFS(v[nod][i],max(Max,d[nod][i]));
ap[v[nod][i]]=0;
}
}
}
ap[nod]=0;
}
}
int main()
{
f>>n>>mu>>k;
for(int i=1;i<=mu;++i)f>>m[i].a>>m[i].b>>m[i].c;
for(int i=1;i<=n;++i)t[i]=i;
sort(m+1,m+mu+1,cmp);
while(mf<n-1)
{
int x=Root(m[ind].a);
int y=Root(m[ind].b);
if(x!=y)
{
v[x].push_back(y);
v[y].push_back(x);
d[x].push_back(m[ind].c);
d[y].push_back(m[ind].c);
mf++;
Unite(x,y);
}
ind++;
}
for(int i=1;i<=k;++i)
{
f>>in>>sf;ok=1;
DFS(in,0);
}
}