Pagini recente » Cod sursa (job #3271130) | Cod sursa (job #2313143) | Cod sursa (job #407537) | Cod sursa (job #2403970) | Cod sursa (job #1132943)
#include <fstream>
#include <vector>
#include <bitset>
#include <utility>
#include <queue>
using namespace std;
#define NMAX 1505
vector<pair<int,int> > graf[NMAX];
//long long int d[NMAX];
#define inf ((1ull<<61)-1)
vector<long long int> d(NMAX, inf);
long long int cate[NMAX];
bitset<NMAX> viz;
priority_queue<pair<int,int> > coada;
int n;
inline void dijkstra()
{
//int i;
//for(i=2;i<=n;i++)
// d[i]=inf;
d[1]=0;
coada.push(make_pair(0,1));
cate[1]=1;
pair<int,int> y;
while(!coada.empty())
{
y=coada.top();
coada.pop();
//cout<<"s-a scos y="<<y.second<<endl;
if(!viz[y.second])
{
//cout<<"ok"<<endl;
//cout<<graf[y.ft].size()<<endl;
viz[y.second]=1;
for(vector<pair<int,int> >::iterator it=graf[y.second].begin();it!=graf[y.second].end();it++)
{
// cout<<"bagam cu "<<it->first<<' '<<it->second<<endl;
if(d[y.second]+it->second<d[it->first])
{
d[it->first]=d[y.second]+it->second;
cate[it->first]=cate[y.second];
coada.push(make_pair(-d[it->first],it->first));
}
else if(d[y.second]+it->second==d[it->first])
cate[it->first]+=cate[y.second];
}
}
}
}
int main()
{
ifstream cin("dmin.in");
ofstream cout("dmin.out");
int i,m,a,b,c;
cin>>n>>m;
for(i=0;i<m;i++)
{
cin>>a>>b>>c;
graf[a].push_back(make_pair(b,c));
graf[b].push_back(make_pair(a,c));
}
dijkstra();
if(n==1)
{
cout<<'\n';
cin.close();
cout.close();
return 0;
}
cout<<cate[2];
for(i=3;i<=n;i++)
cout<<' '<<cate[i];
cout<<'\n';
cin.close();
cout.close();
return 0;
}