Pagini recente » Cod sursa (job #2417596) | Cod sursa (job #1789075) | Cod sursa (job #1948632) | Cod sursa (job #609746) | Cod sursa (job #882287)
Cod sursa(job #882287)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
struct st
{
int x,y,z;
};
st v[30001];
vector <int> a[15001],c[15001];
int l[15001],d[15001][15],e[15001][15],p[15001],t[15001],i,j,n,m,k,x,y,z,q,s,cx,cy;
bool cmp(st a,st b)
{
return a.z<b.z;
}
void df(int x)
{
int i;
for (i=0;i<a[x].size();i++)
{
y=a[x][i];
if (l[y]==0)
{
l[y]=l[x]+1;
t[y]=x;
p[y]=c[x][i];
df(y);
}
}
}
int main()
{
ifstream f("radiatie.in");
ofstream g("radiatie.out");
f >> n >> m >> k;
for (i=1;i<=m;i++)
f >> v[i].x >> v[i].y >> v[i].z;
sort(v+1,v+m+1,cmp);
for (i=1;i<=n;i++)
p[i]=i;
q=0;
for (i=1;i<=m;i++)
{
x=v[i].x;
y=v[i].y;
while (p[x]!=x)
x=p[x];
while (p[y]!=y)
y=p[y];
if (x!=y)
{
p[x]=y;
v[++q]=v[i];
}
if (q==(n-1))
break;
}
for (i=1;i<n;i++)
{
a[v[i].x].push_back(v[i].y);
a[v[i].y].push_back(v[i].x);
c[v[i].x].push_back(v[i].z);
c[v[i].y].push_back(v[i].z);
}
l[1]=1;p[1]=0;
df(1);
for (i=2;i<=n;i++)
{
d[i][0]=t[i];
e[i][0]=p[i];
}
for (i=2;i<=n;i++)
for (j=1;j<=14;j++)
{
d[i][j]=d[d[i][j-1]][j-1];
e[i][j]=max(e[i][j-1],e[d[i][j-1]][j-1]);
}
for (i=1;i<=k;i++)
{
f >> x >> y;
cx=x;cy=y;
s=0;
if (l[x]<l[y])
swap(x,y);
if (l[x]>l[y])
{
for (j=0;j<=14;j++)
if (((1 << j) & (l[x]-l[y]))>0)
{
s=max(s,e[x][j]);
x=d[x][j];
}
}
if (x!=y)
{
for (j=14;j>=0;j--)
if (d[x][j]!=d[y][j])
{
s=max(s,max(e[x][j],e[y][j]));
x=d[x][j];
y=d[y][j];
}
s=max(s,max(e[x][0],e[y][0]));
}
g << s << "\n";
}
return 0;
}