Advertisement
Guest User

dikstra

a guest
May 23rd, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define f(i,x,y) for (int i = x; i < y; i++)
  4. #define fd(i,x,y) for(int i = x; i>= y; i--)
  5. #define FOR(it,A) for(typeof A.begin() it = A.begin(); it!=A.end(); it++)
  6. #define all(v) (v).begin(), (v).end()
  7. #define rall(v) (v).rbegin(), (v).rend()
  8. #define vint vector<int>
  9. #define ll long long
  10. #define clr(A,x) memset(A, x, sizeof A)
  11. #define pb push_back
  12. #define pii pair<int,int>
  13. #define fst first
  14. #define snd second
  15. #define ones(x) __builtin_popcount(x)
  16. #define cua(x) (x)*(x)
  17. #define eps (1e-9)
  18. #define oo (1<<30)
  19. #define M 100
  20.  
  21. vector<pii> Graph[M];
  22. ll dis[M];
  23.  
  24. bool operator<(pii A, pii B){
  25. return dis[A.snd] < dis[B.snd];
  26. }
  27.  
  28. void dijkstra(int s){
  29. memset(dis,1,sizeof dis);
  30. dis[s]=0;
  31. multiset<pii> PQ;
  32. //priority_queue<pii, vector<pii>, greater<pii> > PQ;
  33. PQ.insert(pii(0,s));
  34.  
  35. //PQ.push(pii(0,s));
  36. while(!PQ.empty()){
  37. //pii top=PQ.top(); PQ.pop();
  38. pii top = *PQ.begin();
  39. PQ.erase(PQ.begin());
  40. int d,u;
  41. d=top.first; u=top.second;
  42. if(dis[u]==d){
  43. FOR(it,Graph[u]){
  44. int v=it->fst;
  45. int w=it->snd;
  46. if(dis[u]+w <dis[v]){
  47. dis[v]=dis[u]+w;
  48. PQ.insert(pii(dis[v],v));
  49. //PQ.push(pii(dis[v],v));
  50. }
  51. }
  52. }
  53. }
  54. }
  55.  
  56.  
  57. int main(){
  58. int N;cin>>N;
  59. for(int i=0;i<N;i++){
  60. int u,v,w;cin>>u>>v>>w;
  61. Graph[u].pb(pii(v,w));
  62. Graph[v].pb(pii(u,w));
  63. }
  64.  
  65. printf("Grafo: \n");
  66. for(int i=0;i<N;i++){
  67. printf("Nodo %d:\t",i);
  68. FOR(it,Graph[i]){
  69. printf("%d (%d)\t",it->fst,it->snd);
  70. }
  71. cout<<endl;
  72. }
  73.  
  74. dijkstra(0);
  75. printf("distancias: \t\n");
  76. for(int i=0;i<5;i++) cout<<dis[i]<<endl;
  77.  
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement