Pagini recente » Cod sursa (job #2747846) | Cod sursa (job #1791584) | Cod sursa (job #1773360) | Cod sursa (job #1783370) | Cod sursa (job #1638943)
#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;
}