Pagini recente » Cod sursa (job #1885099) | Cod sursa (job #1295553) | Cod sursa (job #289176) | Cod sursa (job #2042985) | Cod sursa (job #1295671)
#include<cstdio>
#include<vector>
#include<set>
using namespace std;
const int N=50000;
class Edge{
public:
int v,c;
Edge(){
}
Edge(int vv,int cc){
v=vv;
c=cc;
}
bool operator<(const Edge&e)const{
return e.c>c;
}
};
vector<Edge>g[N+1];
multiset<Edge>s;
int dist[N+1];
bool vis[N+1];
int n,m;
void lol(){
int x=0;
x++;
}
void dijkstra(){
int i;
s.insert(Edge(1,0));
while(!s.empty()){
Edge dad=*s.begin();
s.erase(s.begin());
if(dad.v==166)
lol();
for(i=0;i<g[dad.v].size();i++){
Edge son=g[dad.v][i];
if(son.v==166)
lol();
if(son.v!=1&&(!vis[son.v]||dist[dad.v]+son.c<dist[son.v])){
set<Edge>::iterator it=s.find(Edge(son.v,dist[son.v]));
//if(vis[son.v])
//s.erase(it);
dist[son.v]=dist[dad.v]+son.c;
Edge e=Edge(son.v,dist[son.v]);
s.insert(e);
vis[son.v]=true;
}
}
}
}
int main(){
int i,x,y,z;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
g[x].push_back(Edge(y,z));
}
dijkstra();
for(i=2;i<=n;i++)
printf("%d ",dist[i]);
return 0;
}