Pagini recente » Cod sursa (job #619800) | Cod sursa (job #916915) | Cod sursa (job #2156111) | Cod sursa (job #855777) | Cod sursa (job #497168)
Cod sursa(job #497168)
#include<fstream>
#include<vector>
#define dmax 30008
using namespace std;
ifstream in("radiatie.in");
ofstream out("radiatie.out");
int n,m,q,x,y,f[dmax],h[dmax];
bool t[dmax];
struct mc
{ int v;
long int ct;
};
struct muchie
{ int a;
int b;
long int c;
} g[dmax];
vector<struct mc>v[dmax];
vector<struct mc>::iterator it;
int sf(struct muchie p, struct muchie r)
{ return p.c <= r.c;
}
int acc(int x, int y)
{ while( f[x])
x=f[x];
while(f[y])
y=f[y];
if(x==y)
return 1;
return 0;
}
void uneste(int x, int y)
{ while(f[x])
x=f[x];
while(f[y])
y=f[y];
if(h[x] < h[y])
f[x]=y;
else if(h[y] < h[x])
f[y]=x;
else if(h[x] == h[y])
{ f[y]=x;
h[x]++;
}
}
void kruskal()
{ int nr,i;
mc z;
sort( g+1, g+m+1, sf );
nr=0;
for(i=1; nr<n-1; i++)
{
if( !acc(g[i].a, g[i].b) )
{ nr++;
uneste(g[i].a, g[i].b);
z.v=g[i].b;
z.ct=g[i].c;
v[g[i].a].push_back(z);
z.v=g[i].a;
v[g[i].b].push_back(z);
}
}
}
void dfs(int k,long int mx)
{ vector<struct mc>::iterator it;
if(k==y)
out<<mx<<'\n';
else for(it=v[k].begin();it<v[k].end();it++)
if(!t[it->v])
{ t[it->v]=1;
dfs(it->v,max(mx,it->ct) );
}
}
int main()
{ int i,j;
in>>n>>m>>q;
for(i=1;i<=m;i++)
in>>g[i].a>>g[i].b>>g[i].c;
for(i=1;i<=n;i++)
h[i]=1;
kruskal();
for(i=1;i<=q;i++)
{ in>>x>>y;
dfs(x,-1);
for(j=1;j<=n;j++)
t[j]=0;
}
in.close();
out.close();
return 0;
}