Cod sursa(job #1527510)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 18 noiembrie 2015 11:10:32
Problema Radiatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
int t[15005],i,n,l[15005],m,k,a,b,C[15005],X,Y,rez;
vector <int> G[30005];
struct du{
    int x,y,c;}v[30005],d,e;
bool cmp(du d, du e)
{
    return d.c<e.c;
}
int root(int k)
{
    while(t[k]!=0)
        k=t[k];
    return k;
}
void dfs(int nod)
{
    for(size_t i=0;i<G[nod].size();++i)
    {
        l[G[nod][i]]=l[nod]+1;
        dfs(G[nod][i]);
    }}
int main()
{
    f>>n>>m>>k;
for(i=1;i<=m;i++){
    f>>v[i].x>>v[i].y>>v[i].c;
}
    sort(v+1,v+m+1,cmp);
for(i=1;i<=m;i++)
    {
        a=root(v[i].x);
        b=root(v[i].y);
        if(a!=b)
        {
           t[a]=b;
           G[b].push_back(a);
           C[a]=v[i].c;
        }
    }
for(i=1;t[i];++i);
    dfs(i);
for(i=1;i<=k;i++)
    {
        f>>X>>Y;
        rez=0;
        if(l[X]<l[Y])
            swap(X,Y);
        while(l[X]>l[Y])
        {
            rez=max(rez,C[X]);
            X=t[X];
        }
        while(X!=Y)
        {
            rez=max(rez,max(C[X],C[Y]));
            X=t[X];
            Y=t[Y];
        }
        g<<rez<<'\n';

    }

    return 0;
}