Cod sursa(job #868446)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 31 ianuarie 2013 02:19:58
Problema Ubuntzei Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#define dim 205

using namespace std;


ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");

int A[dim][dim];
int i,j,k,K,a,b,c,n,m,MIN;
int v[dim],x[dim],bb[dim];
void back(int k,int len){
	
	if(k-1==len)  {
		int ans=0;
		ans=A[1][x[1]];
		for(int i=1;i<len;i++){
			ans+=A[x[i]][x[i+1]];
		}
		ans+=A[x[len]][n];
		if(ans<=MIN)
			MIN=ans;
		return ;
	}     
	for(int  i = 1; i <= len; i++)
		if(!bb[i]) {
			x[k] = v[i]; 
			bb[i] = 1; 
			back(k+1,len);
			bb[i] = 0;
		} 
}
int main () {
	
	f>>n>>m;
	
	f>>K;
	for(i=1;i<=K;++i)
		f>>v[i];
	for(i=1;i<=m;++i){
		
		f>>a>>b>>c;
		
		A[a][b]=A[b][a]=c;
	}
	MIN=100000;
	for(k=1;k<=n;++k){
		
		for(i=1;i<=n;++i) {
			
			for(j=1;j<=n;++j){
				
				if(i!=j && A[i][k] && A[k][j]) {
					
					if(!A[i][j] || A[i][j]>A[i][k]+A[k][j])
						A[i][j]=A[i][k]+A[k][j];
				}
			}
		}
	}
	back(1,K);
	g<<MIN<<"\n";
	return 0;
}