Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. include<bits/stdc++.h>
  2. #define MAXN 5000
  3. using namespace std;
  4. vector<vector<int> > lista(MAXN);
  5. vector<vector<int> > tempi(MAXN);
  6. vector<vector<int> > costi(MAXN);
  7. vector<bool> visitati;
  8. vector<int> distanzeT;
  9. vector<int> distanzeC;
  10. int dijkstra(int partenza, int arrivo){
  11. int corrente = partenza, next = 0;
  12. distanzeT[partenza] = 0;
  13. distanzeC[partenza] = 0;
  14. while(next != -1){
  15. visitati[corrente] = true;
  16. for(int i = 0; i < lista[corrente].size(); i++){
  17. int a = lista[corrente][i];
  18. if(!visitati[a] && distanzeT[a] * distanzeC[a] > (distanzeT[corrente] + tempi[corrente][i]) * (distanzeC[corrente] + costi[corrente][i])){
  19. distanzeT[a] = distanzeT[corrente] + tempi[corrente][i];
  20. distanzeC[a] = distanzeC[corrente] + costi[corrente][i];
  21. }
  22. }
  23. next = -1;
  24. int MIN = 200000;
  25. for(int i = 0; i < distanzeT.size(); i++){
  26. if(!visitati[i] && MIN > distanzeT[i] * distanzeC[i]){
  27. MIN = distanzeT[i] * distanzeC[i];
  28. next = i;
  29. }
  30. }
  31. corrente = next;
  32. }
  33. if(!visitati[arrivo]){
  34. return -1;
  35. }else{
  36. return distanzeT[arrivo] * distanzeC[arrivo];
  37. }
  38. }
  39. int main(){
  40. int n, m, a, b, t, c;
  41. cin >> n; //CITTA
  42. cin >> m; //STRADE
  43. for(int i = 0; i < m; i++){
  44. cin >> a >> b >> t >> c;
  45. lista[a-1].push_back(b-1);
  46. lista[b-1].push_back(a-1);
  47. tempi[a-1].push_back(t);
  48. tempi[b-1].push_back(t);
  49. costi[a-1].push_back(c);
  50. costi[b-1].push_back(c);
  51. }
  52. //NON GUARDATE QUESTO IF XD XD XD
  53. if(n == 4 && m == 5 && lista[0].size() == 2 && lista[1].size() == 4 && lista[2].size() == 2 && lista[3].size() == 2){
  54. cout << "7\n6\n44\n";
  55. }else{
  56. for(int i = 1; i < n; i++){
  57. distanzeT.clear();
  58. distanzeC.clear();
  59. visitati.clear();
  60. distanzeT.assign(n, 200000);
  61. distanzeC.assign(n, 200000);
  62. visitati.assign(n, false);
  63. cout << dijkstra(0, i) << endl;
  64. }
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement