Cod sursa(job #972250)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 11 iulie 2013 12:49:06
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#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;
}