Pagini recente » Cod sursa (job #2409145) | Cod sursa (job #2105163) | Cod sursa (job #1893967) | Cod sursa (job #254640) | Cod sursa (job #115401)
Cod sursa(job #115401)
#include <stdio.h>
#define NMax 751
int n, m, k;
int drum[NMax][NMax];
int detm[NMax][NMax];
int detinuti[NMax];
void citire();
void rez();
int main()
{
citire();
rez();
return 0;
}
void rez()
{
int pozc = 1, pozn, detx = 1, costx = 0, i;
while ( detx < k+1 )
{
for (i=1; i<=n; i++)
if ( i != pozc && // daca celula selectata e diferita de cel curenta
drum[pozc][i] && // si daca am drum
detx <= detm[pozc][i] ) // si daca am loc
{
pozn = i; // atunci selectez pozitia
break;
}
for (++i; i<=n; i++)
{
if ( !detinuti[pozn] && detinuti[i] && detx <= detm[pozc][i] )
{
// merg intr-o celula cu detinut
pozn = i;
}
if ( detinuti[pozn] && detinuti[i] && drum[pozc][pozn] > drum[pozc][i] && detx <= detm[pozc][i] )
{
pozn = i;
}
}
costx += (drum[pozc][pozn]*detx);
if (detinuti[pozn] )
detx++;
detinuti[pozn] = 0;
pozc = pozn;
}
FILE *g = fopen( "gather.out", "wt" );
fprintf( g, "%d\n", costx );
}
void citire()
{
int i, j, aux, x, y, l, c;
FILE *f = fopen( "gather.in", "rt" );
fscanf( f, "%d %d %d", &k, &n, &m );
for (i=0; i<k; i++)
{
fscanf( f, "%d", &aux );
detinuti[aux]++;
}
for (i=0; i<m; i++)
{
fscanf( f, "%d %d %d %d", &x, &y, &l, &c );
drum[x][y] = drum[y][x] = l;
detm[x][y] = detm[y][x] = c;
}
}