Cod sursa(job #2148651)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 1 martie 2018 21:04:49
Problema Radiatie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream f ("radiatie.in");
ofstream g ("radiatie.out");
const int nmax=3e4+3;
vector <int> v[nmax];
vector <int> c[nmax];
int n,m,k,a,b,sol,GR[nmax],act;
struct usu
{
      int a,b,c;
}mu[nmax];
bool viz[nmax];
void dfs(int nod,int act)
{
      viz[nod]=1;
      if(nod==b) sol=act;
      for(int i=0;i<v[nod].size();++i)
      {
            if(viz[v[nod][i]]) continue;
            dfs(v[nod][i],max(act,c[nod][i]));
      }
}
inline bool cmp(const usu &t1,const usu &t2)
{
      return t1.c<t2.c;
}
inline int gr(int nod)
{
      if(GR[nod]==nod) return nod;
      GR[nod]=gr(GR[nod]);
      return GR[nod];
}
int main()
{
      f>>n>>m>>k;
      for(int i=1;i<=m;++i) f>>mu[i].a>>mu[i].b>>mu[i].c;
      sort(mu+1,mu+m+1,cmp);
      for(int i=1;i<=n;++i) GR[i]=i;
      for(int i=1;i<=m&&act<n-1;++i)
      {
            if(gr(mu[i].a)!=gr(mu[i].b))
            {
                  ++act;
                  v[mu[i].a].push_back(mu[i].b);
                  c[mu[i].a].push_back(mu[i].c);
                  v[mu[i].b].push_back(mu[i].a);
                  c[mu[i].b].push_back(mu[i].c);
                  GR[gr(mu[i].a)]=gr(mu[i].b);
            }
      }
      while(k--)
      {
            f>>a>>b;
            memset(viz,0,sizeof(viz));
            sol=0;
            dfs(a,0);
            g<<sol<<'\n';
      }
      return 0;
}