Cod sursa(job #7573)

Utilizator mastermageSchneider Stefan mastermage Data 21 ianuarie 2007 18:18:11
Problema Radiatie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

struct ncon{int v,l;};
class predn{public:
	int operator()(const ncon&a,const ncon&b){
		return a.l>b.l;
	}
};


int n,m,k;
vector<vector<ncon> > mvei;
FILE*fi,*fo;


void inputFunc(){
	fi=fopen("radiatie.in","r");fo=fopen("radiatie.out","w");
	fscanf(fi,"%d %d %d", &n, &m, &k);
	
	mvei.assign(n, vector<ncon>());
	
	for(int i=0;i<m;i++){
		int a,b,c;fscanf(fi,"%d %d %d",&a,&b,&c);a--,b--;
		ncon aux;aux.l=c;
		aux.v=a;mvei[b].push_back(aux);
		aux.v=b;mvei[a].push_back(aux);
	}
}

void outputFunc(){fclose(fi);fclose(fo);}




int main(){
	inputFunc();
	
	for(int i=0;i<k;i++){
		int st,en;fscanf(fi,"%d %d",&st,&en);st--,en--;
		vector<int> viz(n,-1);viz[st]=0;
		priority_queue<ncon,vector<ncon>,predn> qu;
		
		for(int j=0;j<mvei[st].size();j++)qu.push(mvei[st][j]);
		
		while(!qu.empty()){
			ncon p=qu.top();qu.pop();
			if(viz[p.v]==-1 || viz[p.v]>p.l){
				viz[p.v]=p.l;
				for(int j=0; j<mvei[p.v].size(); j++){
					ncon nx=mvei[p.v][j];
					if(nx.l<p.l)nx.l=p.l;
					qu.push(nx);
				}
				
			}
			if(viz[en]!=-1)break;
		}
		
		fprintf(fo,"%d\n",viz[en]);
	}
	
	outputFunc();
	return 0;
}