Cod sursa(job #1638943)

Utilizator hunisanHunor Csaki hunisan Data 8 martie 2016 10:12:29
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;
const int INF = 0x3F3F3F3F;

int main()
{

    ifstream be("ubuntzei.in");
    ofstream ki("ubuntzei.out");
    int nodes, edges, friends;

    be >> nodes >> edges >> friends;

    int d[nodes][nodes];
    int f[friends];
    memset(d,INF,sizeof(d));

    for(int i = 0; i < friends ; i++)
    {
        be >> f[i];
    }

    for(int i = 0; i < edges; i++)
    {
        int u,v,cost;
        be >> u >> v >> cost;
        u--; v--;
        d[u][v]=d[v][u]=cost;
    }

    for(int k = 0; k < nodes; k++)
        for(int i = 0; i < nodes; i++)
            for(int j = 0; j < nodes; j++)
                d[i][j] = min(d[i][j],d[i][k]+d[k][j]);

    if(friends == 0)
        ki << d[0][nodes-1];
    else
    {
        int cursor = 0;
        bool marvolt[friends];
        int cb = friends;
        memset(marvolt,false,sizeof marvolt);
        int locsika= 0;
        int lasti = 0;
        while(cursor != nodes-1)
        {
            int mini=INF, selecti = -1;

            for(int i = 0; i < friends; i++)
            {
                if(!marvolt[i])
                {
                    mini = min(mini,d[cursor][i]);
                    selecti = i;
                    lasti = i;
                }
            }
            if(friends>0)
            {
                locsika+= mini;
                cursor = selecti;
                marvolt[selecti]=1;
                friends--;
            }
            else
            {
                locsika += d[lasti][nodes-1];
                cursor = nodes-1;
            }


        }

        cout << locsika << endl;

    }

    return 0;
}