Cod sursa(job #1888691)

Utilizator diacacmmDiac Adrian diacacmm Data 22 februarie 2017 11:56:02
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <string.h>
#define pinfinit 3500
#define dim 6000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
short int i,n,a[dim][dim],min1,j,poz,loc[dim],x,y,z,m,k,s[dim],d[dim],t[dim];
void citire()
{
    f>>n>>m>>k;
      for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
             a[i][j]=pinfinit;
    for(i=1;i<=k;i++)
        f>>loc[i];
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        a[x][y]=a[y][x]=z;
    }
}
int dijkstra(int r,int r1)
{
    memset(s,0,sizeof s);
    memset(d,0,sizeof d);
    s[r]=1;
    for(i=1;i<=n;i++)
    {
        d[i]=a[r][i];
        if(i!=r)
            if(d[i]<pinfinit)
               t[i]=r;
    }
    for(i=1;i<=n-1;i++)
    {
        min1=pinfinit;
        for(j=1;j<=n;j++)
            if(s[j]==0)
                if(d[j]<min1)
                {
                    min1=d[j];
                    poz=j;
                }
        s[poz]=1;
        for(j=1;j<=n;j++)
            if(s[j]==0)
               if(d[j]>d[poz]+a[poz][j])
                {
                  d[j]=d[poz]+a[poz][j];
                  t[j]=poz;
                }
    }
     return r1;
}
int main()
{

   citire();
   int sum=0;
   loc[0]=1;
  loc[k+1]=n;
   for(int h=1;h<=k+1;h++){
     sum+=dijkstra(loc[h-1],loc[h])-1;
 }
   g<<sum;
    return 0;
}