Cod sursa(job #3178934)

Utilizator degoCozma Diego dego Data 2 decembrie 2023 18:14:39
Problema Radiatie Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct muchie
{
    int x,y,c,viz;
} v[30003];
int t[15002],sz[15002],fr[16000],n,m,nr,r;
long long s;
int a[15002][15002],b[15002][15002];
#define inf 1000000002
bool cmp(muchie w,muchie b)
{
    return w.c<b.c;
}
void kruskal()
{
    for(int i=1; i<=n; i++)
    {
        t[i]=i;
        sz[i]=1;
    }
    sort (v+1,v+m+1,cmp);
    for(int i=1; i<=m; i++)
    {
        int w=v[i].x,b=v[i].y;
        while(w!=t[w])
            w=t[w];
        while(b!=t[b])
            b=t[b];
        if(t[w]!=t[b])
        {
            v[i].viz=1;
            if(sz[w]>sz[b])
            {
                sz[w]+=sz[b];
                t[b]=w;
            }
            else
            {
                sz[b]+=sz[w];
                t[w]=b;
            }
        }
    }
}
void bfs(int nod,int val,int per)
{
    fr[nod]=1;
    for(int i=1;i<=n;i++)
    {
        if(fr[i]==0 && a[i][nod]!=0)
        {
            if(b[i][per]==0)
            b[i][per]=max(a[i][nod],val);
            bfs(i,max(a[i][nod],val),per);
        }
    }
}
int main()
{
    f>>n>>m>>r;
    for(int i=1; i<=m; i++)
        f>>v[i].x>>v[i].y>>v[i].c;
    kruskal();
    for(int i=1; i<=m; i++)
        if(v[i].viz==1)
            a[v[i].x][v[i].y]=a[v[i].y][v[i].x]=v[i].c;
   for(int i=1;i<=n;i++)
   {
       for(int j=1; j<=n; j++)
        fr[j]=0;
        bfs(i,0,i);
   }
    int c,d;
    for(int i=1; i<=r; i++)
    {
        f>>c>>d;
       g<<b[c][d]<<'\n';
    }
    return 0;
}