Cod sursa(job #700121)

Utilizator valentina506Moraru Valentina valentina506 Data 29 februarie 2012 23:58:15
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,i,j,k,a[150][150],v[15],x,y,c,s,minim,minct;
bool uz[150];
int sol[15];

void det(int k,int minct)
{
	int i;
	
	if(k==s+2)
	{
		
		minct+=a[sol[k-1]][n];
		if(minct<minim)
			minim=minct;
	}
	else
	for(i=1;i<=s;++i)
		if(!uz[v[i]])
		{
			uz[v[i]]=1;
			sol[k]=v[i];
			minct+=a[sol[k-1]][sol[k]];
			det(k+1,minct);
			uz[v[i]]=0;
			minct-=a[sol[k-1]][sol[k]];
		}
}

int main()
{
	freopen("ubuntzei.in","r",stdin);
	freopen("ubuntzei.out","w",stdout);
	
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=s;++i)
		scanf("%d ",&v[i]);
	
	for(i=1;i<=m;++i)
	{
		scanf("%d %d %d",&x,&y,&c);
		a[x][y]=a[y][x]=c;
	}
	
	 for(k = 1;k <= n;k++)
        for(i = 1;i <= n;i++)
            for(j = 1;j <= n;j++)
                if(a[i][k] && a[k][j] && (a[i][k] + a[k][j] < a[i][j] || !a[i][j]) && i != j)
                    a[i][j] = a[i][k] + a[k][j];
				
				
				
				if(s==0)
					printf("%lld\n",a[1][n]);
			/*	else
				{
				    minim=1<<30;
				    minct=0;
				    sol[1]=1;
				    det(2,0);
					printf("%lld\n",minim);
				}*/
				
				return 0;
}