Cod sursa(job #975995)

Utilizator misinoonisim necula misino Data 22 iulie 2013 11:27:42
Problema Radiatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
int t1,t2,n,m,i,k,maxi,x,y,t[15010],niv[15010],cost[15100];
struct muchie{int x,y,c;};
muchie mu[30100];
inline bool cmp(muchie x,muchie y)
{
    return x.c<y.c;
}
inline int tata(int x)
{
    while(x!=t[x])
    x=t[x];
    return x;
}
inline void nivel(int x)
{
    if(t[x]==x)
    return ;
    nivel(t[x]);
    niv[x]=niv[t[x]]+1;
}
int main()
{
    f>>n>>m>>k;
    for(i=1;i<=m;++i)
    {
        f>>mu[i].x>>mu[i].y>>mu[i].c;
    }
    sort(mu+1,mu+m+1,cmp);
    for(i=1;i<=n;++i)
    t[i]=i;
    for(i=1;i<=m;++i)
    {
        t1=tata(mu[i].x);
        t2=tata(mu[i].y);
        if(t1!=t2)
        {
            t[t1]=t2;
            cost[t1]=mu[i].c;
        }
    }
    for(i=1;i<=n;++i)
    if(!niv[i])
    nivel(i);
    for(i=1;i<=k;++i)
    {
        f>>x>>y;
        maxi=0;
        while(niv[x]<niv[y])
        {
            maxi=max(maxi,cost[y]);
            y=t[y];
        }
        while(niv[x]>niv[y])
        {
            maxi=max(maxi,cost[x]);
            x=t[x];
        }
        while(x!=y)
        {
            maxi=max(maxi,cost[x]);
            maxi=max(maxi,cost[y]);
            x=t[x];
            y=t[y];
        }
        g<<maxi<<'\n';
    }
    return 0;
}