Pagini recente » Cod sursa (job #1406376) | Cod sursa (job #781428) | Cod sursa (job #296142) | Cod sursa (job #124228) | Cod sursa (job #2125957)
#include <bits/stdc++.h>
#define NMAX 15001
using namespace std;
ifstream fin("radiatie.in") ;
ofstream fout("radiatie.out") ;
vector<pair<pair<int,int>,int> >edge ;
vector<pair<int,int> > graf[NMAX] ;
int parinte[NMAX] , r[NMAX] , index[NMAX] ;
int n , m , k , maxm ;
bool flag ;
bool viz[NMAX] ;
bool compar ( pair<pair<int,int>,int> p1 , pair<pair<int,int>,int> p2 )
{
return p1.second < p2.second ;
}
void citire()
{
int i , z , y , x ;
fin >> n >> m >> k ;
for ( i = 1 ; i <= m ; i++ )
{
fin >> x >> y >> z ;
edge.push_back(make_pair(make_pair(x,y),z)) ;
}
sort(edge.begin(),edge.end(),compar) ;
memset(r,0,4*n+4) ;
}
int root(int x)
{
while ( x != parinte[x] )
x = parinte[x] ;
return x ;
}
void unite(int x , int y)
{
if ( r[x] < r[y] )
parinte[x] = y ;
else if ( r[x] > r[y] )
parinte[y] = x ;
else if ( r[x] == r[y] )
{
parinte[y] = x ;
r[x]++ ;
}
}
void solve()
{
int i , r1 ,r2 ;
for ( i = 1 ; i <= n ; i++ )
parinte[i] = i ;
for ( i = 0 ; i < m ; i++ )
{
r1 = root(edge[i].first.first) ;
r2 = root(edge[i].first.second) ;
if ( r1 != r2 )
{
unite(r1,r2) ;
graf[edge[i].first.first].push_back(make_pair(edge[i].first.second,edge[i].second)) ;
graf[edge[i].first.second].push_back(make_pair(edge[i].first.first,edge[i].second)) ;
}
}
}
void DFS(int nod,int finall)
{
viz[nod] = true ;
for (int i = 0 ; i < graf[nod].size() ; i++ )
{
if ( graf[nod][i].first == finall )
{
parinte[graf[nod][i].first] = nod ;
index[graf[nod][i].first] = i;
flag = true ;
}
if ( flag == true )
return ;
if ( viz[graf[nod][i].first] == false )
{
parinte[graf[nod][i].first] = nod ;
index[graf[nod][i].first] = i ;
DFS(graf[nod][i].first,finall) ;
}
}
}
int main()
{
int i, x , y, aux ;
citire() ;
solve() ;
for ( i = 1 ; i <= k ; i++ )
{
maxm = 0 ;
fin >> x >> y;
flag = false ;
memset(viz,false,n+1) ;
for ( aux = 1 ; aux <= n ; aux++ )
parinte[aux] = aux;
DFS(x,y) ;
for ( aux = y ; aux != x ; aux = parinte[aux] )
{
maxm=max(graf[parinte[aux]][index[aux]].second,maxm) ;
}
fout << maxm << '\n' ;
}
}