fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define INF 100001
  5.  
  6. int adj[251][251]={0};
  7. int dist[251];
  8. int vis[251]={0};
  9. int dis[251][251]={0};
  10.  
  11. void dijkstra(int n, int s)
  12. {
  13. int cnt=0;
  14. int i,curr,newdist,k;
  15. for(i=0;i<n;i++)
  16. {
  17. vis[i]=0;
  18. dist[i]=INF;
  19. }
  20.  
  21. dist[s]=0;
  22. curr= s;
  23. vis[s]=1;
  24.  
  25. while(cnt!=n)
  26. {
  27. newdist=dist[curr];
  28. for(i=0;i<n;i++)
  29. {
  30. if(i!=curr && (adj[curr][i]+newdist)<dist[i])
  31. dist[i]=adj[curr][i]+newdist;
  32. }
  33.  
  34. int min=10000;
  35.  
  36. for(i=0;i<n;i++)
  37. {
  38. if(vis[i]!=1 && dist[i]<min)
  39. {
  40. min=dist[i];
  41. k=i;
  42. }
  43. }
  44. curr=k;
  45. vis[k]=1;
  46. cnt++;
  47. }
  48. for(i=0;i<n;i++)
  49. dis[s][i]=dist[i];
  50. }
  51.  
  52. int main() {
  53. // your code goes here
  54. int n,m,g,p,q;
  55. cin>>n;
  56. int i,j,src,dest;
  57. for(i=0;i<n;i++)
  58. {
  59. for(j=0;j<n;j++)
  60. {
  61. cin>>adj[i][j];
  62. }
  63. }
  64. for(i=0;i<n;i++)
  65. dijkstra(n,i);
  66. cin>>m;
  67. int w;
  68. while(m--)
  69. {
  70. cin>>src>>g>>dest;
  71. w=dis[src][g]+ dis[g][dest]-adj[src][dest];
  72. if(w<0)
  73. w=0;
  74. cout<<dis[src][g]+ dis[g][dest]<<" "<<w<<endl;
  75. }
  76. return 0;
  77. }
Runtime error #stdin #stdout 0s 3176KB
stdin
5
0 100000 0 100000 50000
100000 0 1 100000 50000
100000 100000 0 1 50000
100000 100000 0 100000 50000
100000 100000 100000 100000 0
5
0 1 2
1 2 3
2 0 3
0 3 2
2 3 0
stdout
Standard output is empty