Cod sursa(job #887599)

Utilizator zurzic_doruzurzic zeljko zurzic_doru Data 23 februarie 2013 21:52:20
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
int a[2001][2001],s[2001];
int main()
{
	int v[16],n,m,i,j,pp,pp2,nr,min,d[2001],x,y,c,t,poz,k;
	freopen("ubuntzei.in","r",stdin);
	freopen("ubuntzei.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	for(i=1;i<=k;i++)
		scanf("%d",&v[i]);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(i!=j)
				a[i][j]=100001;
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&c);
		a[x][y]=c;
	}
	for(i=1;i<=n;i++)
		d[i]=a[1][i];
	
	for(i=1;i<n;i++)
	{
		min=100001;
		for(j=1;j<=n;j++)
			if(d[j]<min&&s[j]==0)
			{
				min=d[j];
				poz=j;
			}
		s[poz]=1;
		for(j=1;j<=n;j++)
			if(d[j]>d[poz]+a[poz][j])
			{
				/*pp=0;
				pp2=0;
				for(t=1;t<=k&&pp==0;t++)
				{
					if(j==v[t])
						pp=1;
					if(poz==v[t])
						pp2=1;
				}
				if(pp==0||pp2==1)*/
					d[j]=d[poz]+a[poz][j];
			}
	}
	nr=1;
	for(i=1;i<=n;i++)
		if(d[i]!=0&&d[i]!=100001)
			nr++;
	printf("%d",nr);
	
	return 0;
}