Cod sursa(job #1113060)

Utilizator SanyiSanyiiiiii Sanyii Sanyi Data 20 februarie 2014 11:58:22
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <iostream>
#include <fstream>
#include <climits>

using namespace std;
int n,m,k;
int x,y,z;

int main(){
	ifstream f("ubuntzei.in");
	ofstream g("ubuntzei.out");
	f >> n >> m >> k;
	//cout << k;
	int ubuntuk[k];
	for (int i=0;i<k;i++){
		f >> ubuntuk[i];
	}
	int a[n][n];
	for (int i=0;i<n;i++){
		for (int j=0;j<n;j++){
			a[i][j]=-1;
		}
	}
	for (int i=0;i<m;i++){
		f >> x >> y >> z;
		a[x-1][y-1]=z;
		a[y-1][x-1]=z;
	}
	for (int i=0;i<n;i++){
		for (int j=0;j<n;j++){
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	bool megvan[n];
	int tav[n];
	int index=0;
	int indexx=0;
	int vegsout=0;
	while(index!=k){
		for (int i=0;i<n;i++){
			megvan[i]=false;
			tav[i]=INT_MAX;
		}
		x=indexx;
		megvan[x]=true;
		tav[x]=0;
		int min,mini;
		int valami=0;
		for (int i=0;i<n-1;i++){
			for (int j=0;j<n;j++){
				if (a[x][j]!=-1&&(tav[j]>(tav[x]+a[j][x]))&&!megvan[j]){
					tav[j]=tav[x]+a[x][j];
				}
			}
			min=INT_MAX;
			for (int j=0;j<n;j++){
				if(min>tav[j]&&!megvan[j]){
					min=tav[j];
					mini=j;
				}
			}
			megvan[mini]=true;
			x=mini;
		}
		//cout << endl;
		/*for (int i=0;i<n;i++){
			cout<<tav[i]<< " ";
		}*/
		//cout << endl;
		vegsout=vegsout+tav[ubuntuk[index]-1];
		indexx=ubuntuk[index]-1;
		index++;
	}
	for (int i=0;i<n;i++){
			megvan[i]=false;
			tav[i]=INT_MAX;
		}
		x=indexx;
		megvan[x]=true;
		tav[x]=0;
		int min,mini;
		int valami=0;
		for (int i=0;i<n-1;i++){
			for (int j=0;j<n;j++){
				if (a[x][j]!=-1&&(tav[j]>(tav[x]+a[j][x]))&&!megvan[j]){
					tav[j]=tav[x]+a[x][j];
				}
			}
			min=INT_MAX;
			for (int j=0;j<n;j++){
				if(min>tav[j]&&!megvan[j]){
					min=tav[j];
					mini=j;
				}
			}
			megvan[mini]=true;
			x=mini;
		}
		//cout << endl;
		/*for (int i=0;i<n;i++){
			cout<<tav[i]<< " ";
		}*/
		//cout << endl;
		vegsout=vegsout+tav[n-1];
		g << vegsout;
}