Pagini recente » Cod sursa (job #1368592) | Cod sursa (job #2825172) | Cod sursa (job #643097) | Cod sursa (job #2333850) | Cod sursa (job #7210)
Cod sursa(job #7210)
#include <fstream>
#include <iostream>
//#define infinit 2000000000;
//using namespace std;
int n,m,k;
int x[30005],y[30005],xrez[30005],yrez[30005],cost[30005],viz[30005],sol[30005],c[30005];
void citire()
{int i;
ifstream f("radiatie.in");
f>>n>>m>>k;
for (i=1;i<=m;i++)
f>>x[i]>>y[i]>>c[i];
for (i=1 ;i<=k;i++)
f>>xrez[i]>>yrez[i];
f.close();
for (i=0;i<=n;i++)
sol[i]=0;
}
int search(int a, int b)
{for (int i=1;i<=m;i++)
if ( ((x[i]==a) && (y[i]==b)) || (( x[i]==b ) && (y[i]==a )) ) return c[i];
return 0;
}
void initializare(int nod)
{int a;
for (int i=1;i<=n;i++)
{cost[i]=2000000000;
a = search (i,nod);
if (a) cost[i]=a;
viz[i]=0;
}
cost[nod]=0; viz[nod]=1;
}
void bagarez(int nod,int t)
{int i;
for (i=1;i<=k;i++)
if (xrez[i] == nod ) sol[i] = cost[yrez[i]];
}
void rezolvare()
{long int i,t,a,min=0,p;
for (t=1;t<=k;t++)
if (sol [t] == 0 )
{initializare ( xrez[t] );
min =0;
while (min!=2000000000)
{min = 2000000000;
for (i=1;i<=n;i++)
if (( !viz[i] ) && (cost[i] < min ))
{p=i;
min = cost[i];
}
if (min < 2000000000)
{viz[p] = 1;
for (i=1;i<=m;i++)
if (viz[i] == 0 )
{a= search(i,p);
if (a)
{if (a < cost [p])
cost[i] = cost [p];
else cost[i]=a;
}
}
}
}
bagarez(xrez[t],t);
// sol[t]=cost[yrez[t]];
}
}
int main()
{citire();
rezolvare();
ofstream g("radiatie.out");
for (int i=1;i<=k;i++) g <<sol[i]<<'\n';
g.close();
return 0;
}