AlbertMourato

Untitled

Mar 2nd, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 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. int pai[100000000];
  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.     int g = 1;
  25.     while(g--){
  26.         memset(marcado, false, sizeof(marcado));
  27.         memset(grafo, 0, sizeof(grafo));
  28.         fill(custo, custo+100005, 1000000000);
  29.         scanf("%d%d", &n, &m);
  30.         f = 0;
  31.         for(int i = 0;i<m;i++){
  32.             sii(a, b);
  33.             int peso;
  34.             si(peso);
  35.             par aux;
  36.             if(a>f)f = a;
  37.             aux.v= b;
  38.             aux.t = peso;
  39.             grafo[a].push_back(aux);
  40.             aux.v= a;
  41.             aux.t = peso;
  42.             grafo[b].push_back(aux);
  43.         }
  44.         fila.push(pair<int, int>(0, 1));//pair<custp, indice>
  45.         marcado[1] = true;
  46.         custo[1] = 0;
  47.         pai[1] = 1;
  48.         int sai = 0;
  49.         while(!fila.empty()){
  50.             pair<int, int> f = fila.top();
  51.             int auxx = f.first;
  52.             int aux = f.second;
  53.             fila.pop();
  54.             marcado[aux] = true;
  55.             for(int i = 0;i<(grafo[aux].size());i++){
  56.                 if(!marcado[grafo[aux][i].v]){
  57.                         if(custo[grafo[aux][i].v]>(grafo[aux][i].t)+auxx){
  58.                            custo[grafo[aux][i].v]=(grafo[aux][i].t)+auxx;
  59.                            fila.push(pair<int, int>(custo[grafo[aux][i].v],grafo[aux][i].v));
  60.                            pai[grafo[aux][i].v] = aux;
  61.                         }
  62.                 }
  63.             }
  64.         }
  65.         for(int i = 2;i<=f;i++){
  66.             sai+=custo[i]-custo[pai[i]];
  67.         }
  68.         cout<<sai<<endl;;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment