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 main(){
- //freopen("in.txt", "r", stdin);
- //freopen("out.txt", "w", stdout);
- priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > fila;
- int n, m, c, f, t, a, b;
- si(t);
- while(t--){
- memset(marcado, false, sizeof(marcado));
- memset(grafo, 0, sizeof(grafo));
- fill(custo, custo+100005, 1000000000);
- scanf("%d%d%d%d", &n, &m, &c, &f);
- for(int i = 0;i<m;i++){
- sii(a, b);
- int peso;
- si(peso);
- par aux;
- 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>(c, 0));//pair<indice, custo>
- marcado[c] = true;
- custo[c] = 0;
- while(!fila.empty()){
- pair<int, int> f = fila.top();
- int auxx = f.second;
- int aux = f.first;
- 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>(grafo[aux][i].v, custo[grafo[aux][i].v]));
- }
- }
- }
- }
- //for(int i = 0;i<=f;i++)cout<<pai[i]<<" pai "<<i<<endl;
- if(marcado[f])pi(custo[f]);
- else puts("NONE");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment