Cod sursa(job #1650951)

Utilizator viorica1Viorica viorica1 Data 11 martie 2016 22:05:04
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
     #include <iostream>
     #include <stdio.h>
     #include <vector>
     #include <algorithm>
     #define inf 1000
     using namespace std;
     FILE *f=fopen("ubuntzei.in","r"),
     *g=fopen("ubuntzei.out","w");
     int N,M,K,s;
     vector <int> c;
     vector <vector <int>> a;
     char viz[50];
     struct pct{
     int di,nr;};
     int d[50];
     bool comp(pct a, pct b)
     {
         return (a.di<b.di);
     }

     int main()
     {
     	int N,M,K,s=0;
     	fscanf(f,"%d%d%d",&N,&M,&K);
     	c.resize(K+1);
     	a.resize(N+1);
     	for(int i=1;i<=N;i++) a[i].resize(N+1,inf);
        for (int i=1;i<=N;i++)
            fscanf(f,"%d",&c[i]);
        int x,y,z;
        for(int i=1;i<=M;i++)
        {
            fscanf(f,"%d%d%d",&x,&y,&z);
            a[x][y]=a[y][x]=z;
        }
        for(int i=1;i<=N;i++) {viz[i]=0;d[i]=inf;}
        int start;
        for( start=1;start<=1+K;start++)
        {
            int k,mmin;
        for(int i=1;i<=N;i++) {viz[i]=0;
        if(a[start][i]<inf) d[i]=a[start][i];
        else d[i]=inf;}
        viz[start]=1;
        d[start]=0;
        for(int j=1;j<N;j++)
        {
            mmin=inf;
            for(int i=1;i<=N;i++) if(viz[i]==0&&d[i]<mmin) mmin=d[i],k=i;
            viz[k]=1;
            for(int i=1;i<=N;i++)
                if(viz[i]==0&&d[i]>d[k]+a[i][k])
                d[i]=d[k]+a[i][k];
        }
            s+=d[c[start]];
            start=c[start];
        }
        int k,mmin;
        for(int i=1;i<=N;i++) {viz[i]=0;
        if(a[start][i]<inf) d[i]=a[start][i];
        else d[i]=inf;}
        viz[start]=1;
        d[start]=0;
        for(int j=1;j<N;j++)
        {
            mmin=inf;
            for(int i=1;i<=N;i++) if(viz[i]==0&&d[i]<mmin) mmin=d[i],k=i;
            viz[k]=1;
            for(int i=1;i<=N;i++)
                if(viz[i]==0&&d[i]>d[k]+a[i][k])
                d[i]=d[k]+a[i][k];
        s+=d[N];
        fprintf(g,"%d ",s);
     	return 0;
     }}