Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <bits/stdc++.h>
- //%lld
- typedef long long ll;
- #define si(a) scanf("%d", &a)
- #define sii(a, b) scanf("%d%d", &a, &b)
- #define pi(a) printf("%d\n", a)
- using namespace std;
- struct par{
- int v;
- int t;
- };
- vector<par>grafo[100005];
- bool marcado[100005];
- ll custo[100005];
- int pai[100000000];
- int main(){
- priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > fila;
- int n, m, c, f, t, a, b;
- int g = 1;
- while(g--){
- memset(marcado, false, sizeof(marcado));
- memset(grafo, 0, sizeof(grafo));
- fill(custo, custo+100005, 1000000000);
- scanf("%d%d", &n, &m);
- f = 0;
- for(int i = 0;i<m;i++){
- sii(a, b);
- int peso;
- si(peso);
- par aux;
- if(a>f)f = a;
- aux.v= b;
- aux.t = peso;
- grafo[a].push_back(aux);
- aux.v= a;
- aux.t = peso;
- grafo[b].push_back(aux);
- }
- fila.push(pair<int, int>(0, 1));//pair<indice, custo>
- marcado[1] = true;
- custo[1] = 0;
- pai[1] = 1;
- int sai = 0;
- while(!fila.empty()){
- pair<int, int> f = fila.top();
- int auxx = f.first;
- int aux = f.second;
- fila.pop();
- marcado[aux] = true;
- for(int i = 0;i<(grafo[aux].size());i++){
- if(!marcado[grafo[aux][i].v]){
- if(custo[grafo[aux][i].v]>(grafo[aux][i].t)+auxx){
- custo[grafo[aux][i].v]=(grafo[aux][i].t)+auxx;
- fila.push(pair<int, int>(custo[grafo[aux][i].v],grafo[aux][i].v));
- pai[grafo[aux][i].v] = aux;
- }
- }
- }
- }
- for(int i = 2;i<=f;i++){
- sai+=custo[i]-custo[pai[i]];
- }
- cout<<sai<<endl;;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment