Pagini recente » Cod sursa (job #326268) | Cod sursa (job #1060501) | Cod sursa (job #1616236) | Cod sursa (job #1446510) | Cod sursa (job #2323080)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("retea.in");
ofstream g ("retea.out");
const int nmax=1e3+3;
int n,m,k,a,b,nod;
bool viz[nmax][13];
double act,cost,d[nmax][13];
struct gioto
{
double cost;
int nod,k;
inline bool operator < (const gioto &t) const
{
return t.cost<cost;
}
};
priority_queue <gioto> q;
priority_queue <double> usu;
vector <int> v[nmax];
vector <double> c[nmax];
int main()
{
ios::sync_with_stdio(false);
f>>n>>m>>k;
while(m--)
{
f>>a>>b>>cost;
v[a].push_back(b);
v[b].push_back(a);
c[a].push_back(cost);
c[b].push_back(cost);
}
for(int i=1;i<=n;++i)
{
for(int j=0;j<=k;++j) d[i][j]=1e9;
}
d[1][0]=0;
q.push({0,1,0});
while(!q.empty())
{
nod=q.top().nod;
cost=q.top().cost;
int kk=q.top().k;
q.pop();
if(viz[nod][kk]) continue;
viz[nod][kk]=1;
for(int i=0;i<v[nod].size();++i)
{
double tata=c[nod][i];
for(int j=kk;j<=k;++j)
{
if(cost+tata<d[v[nod][i]][j])
{
d[v[nod][i]][j]=cost+tata;
q.push({d[v[nod][i]][j],v[nod][i],j});
}
tata/=2.0;
}
}
}
g<<fixed<<setprecision(7)<<d[n][k];
return 0;
}