Pagini recente » Rating Testerul Retsetat (TesterRetset) | Cod sursa (job #1369891) | Cod sursa (job #1238856) | Cod sursa (job #936705) | Cod sursa (job #1644869)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
struct varoskoz
{
int s,tav;
};
int n,m,k;
int Baratok[16];
int tavok[2001][16]; ///i-edik varosban j darab ubuntuval.
bool ittVanUbuntu[2001];
vector <varoskoz> varos[2001];
struct emberke
{
int poz, ubuntuk, tav;
};
bool kibaszas(emberke now)
{
for (int i = now.ubuntuk + 1;i<=k;i++)
{
if (tavok[now.poz][i] <= now.tav)
{
//cout<<tavok[now.poz][i]<<" "<<now.tav<<endl;
return true;
}
}
return false;
}
int main()
{
ifstream be("ubuntzei.in");
be>>n>>m>>k;
for (int i=0;i<n+1;i++)
{
for (int j=0;j<k+1;j++)
{
tavok[i][j] = 1000000009;
}
}
for (int i=0;i<k;i++)
{
int q;
be>>q;
ittVanUbuntu[q] = true;
// cout<<q<<endl;
}
//cout<<ittVanUbuntu[0]<<ittVanUbuntu[1]<<ittVanUbuntu[2]<<endl;
for (int i=0;i<m;i++)
{
int x,y,z;
varoskoz now;
be>>x>>y>>z;
now.s = y;
now.tav = z;
varos[x].push_back(now);
now.s = x;
varos[y].push_back(now);
}
be.close();
queue <emberke> c;
emberke now,now2;
now.poz = 1;
now.tav = 0;
now.ubuntuk = 0;
c.push(now);
while (!c.empty())
{
now = c.front();
c.pop();
//cout<<"Poz:"<<now.poz<<" Ubuntuk:"<<now.ubuntuk<<" Tav:"<<now.tav<<endl;
if (!kibaszas(now) or (now.poz == n and now.ubuntuk == k)) /// itt jobb vagy a vegen?
{
int Meret = varos[now.poz].size();
for (int i=0;i<Meret;i++)
{
//cout<<"i = "<<i<<endl;
if(varos[now.poz][i].tav + now.tav < tavok[varos[now.poz][i].s][now.ubuntuk + ittVanUbuntu[varos[now.poz][i].s]]/* and !kibaszas()*/)
{
now2.poz = varos[now.poz][i].s;
now2.tav = varos[now.poz][i].tav + now.tav;
now2.ubuntuk = now.ubuntuk + ittVanUbuntu[now2.poz];
//cout<<"itt: "<<ittVanUbuntu[2];
//cout<<"PUSHED : Poz:"<<now2.poz<<" Ubuntuk:"<<now2.ubuntuk<<" Tav:"<<now2.tav<<endl;
tavok[now2.poz][now2.ubuntuk] = now2.tav;
c.push(now2);
}
}
}
else
{
// cout<<"Kib"<<endl;
}
}
/*for (int i = 0;i<=k;i++)
{
cout<<tavok[n][i]<<" ";
}*/
ofstream ki("ubuntzei.out");
ki<<tavok[n][k];
ki.close();
return 0;
}