Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXINT = 1000000007;
  5. int d2[101][101]; // "plus nieskończoność"
  6. int main()
  7. {
  8. // Macierz minimalnych kosztów dojścia
  9. int n,m,x,y,w,kr;
  10. int **d;
  11.  
  12. cin >> n >> kr>> m;
  13. d = new int * [n+1]; // Czytamy liczbę wierzchołków oraz krawędzi
  14.  
  15. // Tworzymy dynamiczną macierz d
  16. for(int i = 1; i <= n; i++)
  17. {
  18. d[i] = new int [n+1]; // Tworzymy wiersz macierzy
  19. for(int j = 1; j <=n; j++)
  20. d[i][j] =INT_MAX; // Wiersz wypełniamy największą liczbą dodatnią
  21. d[i][i] = 0; // Jednakże na przekątnej wpisujemy 0
  22. }
  23.  
  24. for(int i = 1; i <=kr; i++)
  25. {
  26. cin >> x >> y >> w; // Czytamy definicję krawędzi
  27. d[x][y]=(d[x][y],w);
  28. d[y][x]=(d[y][x],w); // Wagę krawędzi umieszczamy w macierzy d
  29. }
  30. // Algorytm Floyda-Warshalla
  31.  
  32. for(int k = 1; k <=n; k++)
  33. for(int i = 1; i <=n; i++)
  34. for(int j = 1; j <=n; j++)
  35. {
  36. w = d[i][k] + d[k][j];
  37. if(d[i][j] > w) d[i][j]=min(d[j][i],w);
  38. }
  39. //cout<<d[1][n]<<endl;
  40. //cout<<d[1][3]<<endl;
  41. //cout<<d[3][1]<<endl;
  42. long long int q,qq;
  43. for (int hh=1; hh<=n; hh++)
  44. {
  45. for (int jj=1; jj<=n; jj++)
  46. d2[hh][jj]=d[hh][jj];
  47. }
  48. for(int i=1;i<=m;i++)
  49. {
  50. for (int hh=1; hh<=n; hh++)
  51. {
  52. for (int jj=1; jj<=n; jj++)
  53. d2[hh][jj]=d[hh][jj];
  54. }
  55. cin>>x>>y>>w;
  56. d2[x][y]=w;
  57. d2[y][x]=w;
  58. for(int k=1;k<=n;k++)
  59. {
  60.  
  61. for(int r=1;r<=n;r++)
  62. {
  63. if (d2[k][r] > d2[k][x] + d2[x][y] + d2[y][r])
  64. d2[k][r]=d2[k][x] + d2[x][y] + d[y][r], d2[x][y]=d2[r][x] + d2[x][y] + d[y][r];
  65. if( d2[k][r] > d2[k][y] + d2[y][x] + d2[x][r])
  66. d2[k][r]=d2[k][y] + d2[y][x] + d2[x][r], d2[r][k]=d2[k][y] + d2[y][x] + d2[x][r];
  67. }
  68.  
  69. }
  70. if(d2[1][n]<d[1][n])
  71. {
  72. printf("1\n");
  73. for(int j=1;j<=n;j++)
  74. for(int r=1;r<=n;r++)
  75. {
  76. d[j][r]=d2[j][r];
  77. }
  78.  
  79. }
  80. else
  81. {
  82. printf("0\n");
  83. }
  84. // q=d[1][x]+d[y][n]+w;
  85. // qq=d[1][y]+d[x][n]+w;
  86. // cout<<q<<endl;
  87. // cout<<qq<<endl;
  88.  
  89.  
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement