Pagini recente » Cod sursa (job #2874303) | Cod sursa (job #829985) | Cod sursa (job #356711) | Cod sursa (job #2497151) | Cod sursa (job #541693)
Cod sursa(job #541693)
#include<fstream>
#include<vector>
#define dmax 200010
#define inf 999999
using namespace std;
int n,m;
vector<int> a[dmax],pozm[dmax];
vector<long long> c1[dmax],c2[dmax];
bool v[dmax];
long long c1min[dmax],c2min[dmax];
int prec[dmax];
int nrm;
ofstream fout("lazy.out");
void citire()
{
int i,x,y,z,w;
ifstream fin("lazy.in");
fin>>n>>m;
for (i=1; i<=m; i++)
{
fin>>x>>y>>z>>w;
a[x].push_back(y);
a[y].push_back(x);
c1[x].push_back(z);
c1[y].push_back(z);
c2[x].push_back(w);
c2[y].push_back(w);
pozm[x].push_back(i);
pozm[y].push_back(i);
}
fin.close();
}
void apm(int k)
{
int i,elem;
int min1,min2,poz,precc;
nrm++; v[k] = 1;
for (i=0; i<(int)a[k].size(); i++)
{
elem = a[k][i];
if (v[elem] == 0 && (c1[k][i] < c1min[elem] || (c1[k][i] == c1min[elem] && c2[k][i] * (1 - c1[k][i]) < c2min[elem])))
{
c1min[elem] = c1[k][i];
c2min[elem] = c2[k][i] * (1 - c1[k][i]);
prec[elem] = k;
}
}
min1 = inf; min2 = inf; poz = 0;
for (i=2; i<=n; i++)
if (v[i] == 0 && (min1 > c1min[i] || (min1 == c1min[i] && min2 > c2min[i])))
{
min1 = c1min[i];
min2 = c2min[i];
poz = i;
precc = prec[i];
}
for (i=0; i<(int)a[poz].size(); i++)
if (a[poz][i] == precc)
{
fout<<pozm[poz][i]<<'\n';
break;
}
if (nrm < n-1)
apm(poz);
}
int main()
{
int i;
citire();
for (i=2; i<=n; i++)
c1min[i] = c2min[i] = inf;
apm(1);
fout.close();
return 0;
}