Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 1007
- #define INF 10000007
- using namespace std;
- typedef pair<double, int> di;
- vector< vector<di> > grafo;
- int n, m, can[MAX], resp_can;
- double c, dist[MAX], resp;
- int djkstra(int no){
- priority_queue<di, vector<di>, greater<di> > fila;
- dist[no] = 0;
- can[no] = 0;
- fila.push(make_pair(0, no));
- while(!fila.empty()){
- di top = fila.top();
- fila.pop();
- double peso = top.first;
- int v = top.second;
- if(dist[v] < peso) continue;
- for(int i = 0; i < grafo[v].size(); i++){
- di vizinho = grafo[v][i];
- if(dist[vizinho.second] > dist[v] + vizinho.first){
- dist[vizinho.second] = dist[v] + vizinho.first + c*(vizinho.first >= c);
- if(vizinho.first >= c) can[vizinho.second] = can[v] + 1;
- printf("%lf\n", dist[vizinho.second]);
- fila.push(make_pair(dist[vizinho.second], vizinho.second));
- }
- }
- }
- }
- int main(){
- scanf("%d %d %lf",&n, &m, &c );
- resp = 0;
- resp_can = 0;
- grafo.assign(n+1, vector<di> ());
- for(int i = 0; i < m; i++){
- int a, b;
- double d;
- scanf("%d %d %lf",&a, &b, &d );
- grafo[a].push_back(make_pair(d, b));
- grafo[b].push_back(make_pair(d, a));
- }
- djkstra(1);
- //printf("%lf %d", resp, resp_can);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement