Pagini recente » Cod sursa (job #1075435) | Cod sursa (job #2537184) | Cod sursa (job #3128209) | Cod sursa (job #388349) | Cod sursa (job #1918563)
#include<queue>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
double cost[2001];
int final[2001];
double eps=0.00000001;
class Compare
{
public:
bool operator()(const int &x, const int &y)
{
return cost[x]>cost[y];
}
};
priority_queue <double, vector <double>, Compare> Heap;
vector <pair <int,double> > g[2001];
int main()
{
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
int n,m,i,x,y;
double c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%lf",&x,&y,&c);
c=log(c);
g[x].push_back(make_pair(y,c));
g[y].push_back(make_pair(x,c));
}
for(i=1;i<=n;i++)
cost[i]=1<<31-1;
Heap.push(1);
cost[1]=0;
while(!Heap.empty())
{
int nod=Heap.top();
Heap.pop();
for(i=0;i<g[nod].size();i++)
{
int vec=g[nod][i].first;
double muc=g[nod][i].second;
if(cost[nod]+muc<cost[vec])
{
cost[vec]=cost[nod]+muc;
Heap.push(vec);
final[vec]=0;
}
if(cost[vec]+eps>=cost[nod]+muc&&cost[nod]+muc>=cost[vec]-eps)
{
final[vec]++;
}
}
}
for(i=2;i<=n;i++)
printf("%d ",final[i]);
return 0;
}