AlbertMourato

Untitled

Mar 1st, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 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. ll custo[100005];
  18.  
  19. int main(){
  20.     //freopen("in.txt", "r", stdin);
  21.     //freopen("out.txt", "w", stdout);
  22.     priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > fila;
  23.     int n, m, c, f, t, a, b;
  24.     si(t);
  25.     while(t--){
  26.         memset(marcado, false, sizeof(marcado));
  27.         memset(grafo, 0, sizeof(grafo));
  28.         fill(custo, custo+100005, 1000000000);
  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(pair<int, int>(c, 0));//pair<indice, custo>
  43.         marcado[c] = true;
  44.         custo[c] = 0;
  45.         while(!fila.empty()){
  46.             pair<int, int> f = fila.top();
  47.             int auxx = f.second;
  48.             int aux = f.first;
  49.             fila.pop();
  50.             marcado[aux] = true;
  51.             for(int i = 0;i<(grafo[aux].size());i++){
  52.                 if(!marcado[grafo[aux][i].v]){
  53.                         if(custo[grafo[aux][i].v]>(grafo[aux][i].t)+auxx){
  54.                            custo[grafo[aux][i].v]=(grafo[aux][i].t)+auxx;
  55.                            fila.push(pair<int, int>(grafo[aux][i].v, custo[grafo[aux][i].v]));
  56.                         }
  57.                 }
  58.             }
  59.         }
  60.         //for(int i = 0;i<=f;i++)cout<<pai[i]<<" pai "<<i<<endl;
  61.         if(marcado[f])pi(custo[f]);
  62.         else puts("NONE");
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment