Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include <utility>
- #include<queue>
- #include<iostream>
- using namespace std;
- typedef pair<int, int> ii;
- struct collegamento
- {
- int to;
- int capacita;
- };
- int Analizza(int N, int M, int W, int L, int arco_da[], int arco_a[], int capacita[], int R, int C) {
- // min cost contiene i megabit minimi per arrivare li
- int MAX_INT = 2000000000;
- vector<int> minCost;
- minCost.resize(N+1, MAX_INT);
- // min distance contiene le distanze 1,2,3,4.. il numero di nodi passati per arrivare li
- vector<int> min_distance( N+1, MAX_INT );
- min_distance[ W ] = 0;
- // ricorda: ogni volta che cambia il collegamento, il par
- vector< vector< collegamento> > grafo(N+1);
- for(int i = 0; i < M; i++)
- {
- int temp = arco_da[i];
- collegamento f;
- f.to = arco_a[i];
- f.capacita = capacita[i];
- grafo[temp].push_back(f);
- f.to = temp;
- grafo[arco_a[i]].push_back(f);
- }
- // rappresenta peso, nodo attuale
- priority_queue< ii, vector<ii>, greater<ii> > pq; pq.push({0, W});
- while(!pq.empty())
- {
- ii v = pq.top(); pq.pop();
- for(int i = 0 ; i < grafo[v.second].size(); i++)
- {
- collegamento u = grafo[v.second][i];
- if(min_distance[v.second] + 1 < min_distance[u.to] || (min_distance[v.second] + 1 == min_distance[u.to] && u.capacita > minCost[v.second]))
- {
- pq.push({min_distance[u.to] = min_distance[v.second] + 1, u.to});
- minCost[u.to] = min(u.capacita, minCost[v.second]);
- }
- }
- }
- return minCost[L];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement