AlbertMourato

dijkstra

Mar 1st, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <bits/stdc++.h>
  3. //%lld
  4. typedef long long ll;
  5. #define si(a) scanf("%d", &a)
  6. #define sii(a, b) scanf("%d%d", &a, &b)
  7. #define pi(a) printf("%d\n", a)
  8.  
  9. using namespace std;
  10. struct par{
  11.     int v;
  12.     int t;
  13. };
  14.  
  15. vector<par>grafo[100005];
  16. bool marcado[100005];
  17. int pai[100005];
  18. int custo[100005];
  19.  
  20. int main(){
  21.     priority_queue<int, vector<int>, greater<int> > fila;
  22.     int n, m, c, f, t, a, b;
  23.     si(t);
  24.     while(t--){
  25.         memset(pai, -1, sizeof(pai));
  26.         memset(marcado, false, sizeof(marcado));
  27.         memset(grafo, 0, sizeof(grafo));
  28.         fill(custo, custo+100005, 100005);
  29.         scanf("%d%d%d%d", &n, &m, &c, &f);
  30.         for(int i = 0;i<m;i++){
  31.             sii(a, b);
  32.             int peso;
  33.             si(peso);
  34.             par aux;
  35.             aux.v= b;
  36.             aux.t = peso;
  37.             grafo[a].push_back(aux);
  38.             aux.v= a;
  39.             aux.t = peso;
  40.             grafo[b].push_back(aux);
  41.         }
  42.         fila.push(c);
  43.         marcado[c] = true;
  44.         custo[c] = 0;
  45.         pai[c] = 0;
  46.         while(!fila.empty()){
  47.             int aux = fila.top();
  48.             fila.pop();
  49.             marcado[aux] = true;
  50.             for(int i = 0;i<(grafo[aux].size());i++){
  51.                 if(!marcado[grafo[aux][i].v]){
  52.                         pai[grafo[aux][i].v] = aux;
  53.                         custo[grafo[aux][i].v] = min(custo[grafo[aux][i].v],(grafo[aux][i].t)+custo[pai[grafo[aux][i].v]]);
  54.                         fila.push(grafo[aux][i].v);
  55.                 }
  56.             }
  57.         }
  58.         if(marcado[f])pi(custo[f]);
  59.         else puts("NONE");
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment