Escolar Documentos
Profissional Documentos
Cultura Documentos
#include <vector>
#include <queue>
#include <limits>
class FilaPrioridadeMinima {
private:
using Elemento = std::pair<double, int>;
struct Comparador {
bool operator()(const Elemento& a, const Elemento& b) {
return a.first > b.first;
}
};
public:
void inserir(int vertice, double distancia) {
heap.push(std::make_pair(distancia, vertice));
}
Elemento remover() {
Elemento topo = heap.top();
heap.pop();
return topo;
}
};
class Grafo {
private:
int ordem;
std::vector<std::vector<std::pair<int, double>>> adjacencias;
public:
Grafo(int n) : ordem(n), adjacencias(n) {}
std::vector<std::pair<int, double>> obterVizinhos(int vertice){ return
adjacencias[vertice]; };
void adicionarAresta(int origem, int destino, double peso) {
adjacencias[origem].emplace_back(destino, peso);
adjacencias[destino].emplace_back(origem, peso);
}
distancia[inicio] = 0.0;
FilaPrioridadeMinima filaPrioridade;
filaPrioridade.inserir(inicio, 0.0);
while (!filaPrioridade.vazia()) {
int u = filaPrioridade.remover().second;
return distancia;
}
class UnionFind {
private:
std::vector<int> pai, tamanho;
public:
UnionFind(int n);
int encontrar(int elemento);
void unir(int elemento1, int elemento2);
};
if (raiz1 != raiz2) {
if (tamanho[raiz1] < tamanho[raiz2]) {
std::swap(raiz1, raiz2);
}
pai[raiz2] = raiz1;
tamanho[raiz1] += tamanho[raiz2];
}
};
int main() {
bool fazParteDoCaminhoMinimo(const std::vector<int>& caminhoMinimo,int bloco);
int ordemGrafo, tamanhoGrafo;
std::cin >> ordemGrafo >> tamanhoGrafo;
Grafo grafoCerebro(ordemGrafo);
std::vector<int> predecessores;
std::vector<double> distancia = grafoCerebro.dijkstra(blocoEntrada - 1,
predecessores);
int numeroBlocos;
numeroBlocos = ordemGrafo;
int numeroNeuroniosDoentes;
std::cin >> numeroNeuroniosDoentes;
Grafo grafoBloco(ordemBloco);
for (int i = 0; i < tamanhoBloco; ++i) {
int origem, destino;
double peso;
std::cin >> origem >> destino >> peso;
grafoBloco.adicionarAresta(origem - 1, destino - 1, peso);
}
return 0;
}