Pagini recente » Cod sursa (job #1839667) | Cod sursa (job #557007) | Cod sursa (job #1143889) | Cod sursa (job #17484) | Cod sursa (job #2470537)
#include <bits/stdc++.h>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
vector <int> a[15005];
struct wow
{
int a,b,cost;
}v[30005];
int tata[15005],rang[15005];
int repr(int x)
{
if (tata[x]!=x)
{
tata[x]=repr(tata[x]);
}
return tata[x];
}
void uneste (int x,int y)
{
x=repr(x);
y=repr(y);
if(x==y)
{
return ;
}
if (rang[x]<rang[y])
{
tata[x]=y;
}
else
if (rang[y]<rang[x])
{
tata[y]=x;
}
else
{
tata[x]=y;
rang[y]++;
}
}
bool compare (wow a,wow b)
{
return a.cost<b.cost;
}
int rmq[16][30005],viz[30005],v1[30005],poz[15005],poz2[15005];
void dfs(int x,int niv)
{
int j;
v1[++q]=x;
v4[q]=niv;
if (poz[x]==0)
{
poz[x]=q;
}
viz[x]=1;
for (j=0;j<a[x].size();j++)
{
if (viz[a[x][j]]==0)
{
dfs(a[x][j],niv);
v1[++q]=x;
v4[q]=niv;
}
}
}
int df2(int x)
{
int j;
v3[++q1]=valoare[x];
poz2[x]=q1;
viz[x]=1;
for (j=0;j<a[x].size();j++)
{
if (viz[a[x][j]]==0)
{
dfs2(a[x][j]);
}
}
v3[++q1]=-valoare[x];
}
int main()
{
f>>n>>m>>k;
for (i=1;i<=m;i++)
{
f>>v[i].x>>v[i].y>>v[i].z;
if (v[i].x>v[i].y)
{
swap(v[i].x,v[i].y);
}
}
sort (v+1,v+m+1,compare);
for (i=1;i<=n;i++)
{
tata[i]=i;
rang[i]=0;
}
for (i=1;i<=m;i++)
{
if (repr(v[i].x)!=repr(v[i].y))
{
uneste(v[i].x,v[i].y);
a[v[i].x].push_back(v[i].y);
a[v[i].y].push_back(v[i].x);
valoare[v[i].y]=v[i].cost;
}
}
q=0;
dfs(1,1);
nr=log2(q);
for (i=1;i<=q;i++)
{
rmq[0][i]=i;
}
putere[0]=1;
for (i=1;i<=nr;i++)
{
putere[i]=putere[i-1]*2;
}
for (i=1;i<=nr;i++)
{
for (j=1;j<=q-putere[i]+1;j++)
{
if (a[rmq[i-1][j]]<a[rmq[i-1][j+putere[i-1]]])
{
rmq[i][j]=rmq[i-1][j];
}
else
{
rmq[i][j]=rmq[i-1][j+putere[i-1]];
}
}
}
for (i=1;i<=n;i++)
{
viz[i]=0;
}
dfs2(1);
for (i=1;i<=q1;i++)
{
v3[i]+=v3[i-1];
}
for (i=1;i<=k;i++)
{
f>>x>>y;
st=min(poz[x],poz[y]);
dr=max(poz[x],poz[y]);
if (x==y)
{
lca=v1[dr];
}
else
{
int k1=log2(dr-st);
if (a[rmq[k1][st]]<a[rmq[k1][dr-(1<<k1)+1]])
{
lca=nani[rmq[k1][st]];
}
else
{
lca=nani[rmq[k1][dr-(1<<k1)+1]];
}
}
}
return 0;
}