Pagini recente » Cod sursa (job #2171055) | Cod sursa (job #3215924) | Cod sursa (job #270437) | Cod sursa (job #1224268) | Cod sursa (job #972250)
Cod sursa(job #972250)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("apm2.in");
ofstream g("apm2.out");
struct muchie{
int nod1 , nod2;
int cost;
};
struct querry{
int nod1 , nod2;
};
querry Q[max_q];
muchie M[max_m];
int cmp( muchie a , muchie b ){
return a.cost < b.cost;
}
void read(){
f>>n>>m>>q;
for( int i = 1 ; i <= m ; i++ )
f>>M[i].nod1>>M[i].nod2>>M[i].cost;
for( int i = 1 ; i <= q ; i++ )
f>>Q[i].nod1>>Q[i].nod2;
}
int radacina( int x ){
while( T[x] > 0 )
x = T[x];
return x;
}
void add( int x , int y ){
int Rx = radacina(x);
int Ry = radacina(y);
if( T[Rx] < T[Ry] ){
T[Rx] += T[Ry];
T[Ry] = Rx;
}
else{
T[Ry] += T[Rx];
T[Rx] = Ry;
}
}
void apm(){
int i , nr = 0;
for( int i = 1 ; i <= n ; i++ )
T[i] = -1;
for( int i = 1 ; i <= m && nr < n ; i++ )
if( radacina(M[i].nod1) != radacina(M[i].nod2) ){
nr++; add( M[i].nod1 , M[i].nod2 );
L[M[i].nod1].push_back( M[i] );
L[M[i].nod2].push_back( M[i] );
}
}
void dfs( int nod , int niv , int nod2){
Fr[nod] = 1;
for( int i = 0 ; i < L[nod].size && ok ; i++ ){
V[niv] = L[nod][i].cost;
if( Fr[L[nod][i].nod1] == 0 ){
if( L[nod][i].nod1 == nod2 ){
}
dfs( L[nod][i].nod1 , niv + 1 , i , );
}
if( Fr[L[nod][i].nod2] == 0 ){
if( L[nod][i].nod2 == nod2 ){
}
}
}
}
void solve(){
for( int i = 1 ; i <= q ; i++ ){
ok = true; memset(Fr , 0 , sizeof(Fr));
dfs(Q[i].nod1 , 1 , Q[i].nod2);
}
}
int main(){
read();
sort( M + 1 , M + m + 1 , cmp );
apm();
solve();
return 0;
}