fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int t,n,k,d,s,i,j,m,w,k1,k2,k3,k4;
  8. cin >> t;
  9. while(t--)
  10. {
  11. k1=0,k2=0,k3=0;
  12. cin >> n >> k;
  13. int tab1[k][n],tab2[k];
  14. for(i=0;i<k;i++) tab2[i]=100000;
  15. for(i=0;i<k;i++)
  16. {
  17. for(j=0;j<n;j++)
  18. {
  19. cin >> tab1[i][j];
  20. }
  21. }
  22. cin >> s >> d;
  23. for(i=0;i<k;i++)
  24. {
  25. if(tab1[i][0]==s) k1=1;
  26. if(tab1[i][1]==d) k2=1;
  27. if(tab1[i][0]==s && tab1[i][1]==d)
  28. {
  29. tab2[i]=tab1[i][2];
  30. k3=i;
  31. }
  32. }
  33. if(k1==0 || k2==0) cout << "NO" << endl;
  34. else
  35. {
  36. while(s<d)
  37. {
  38. k4=1;
  39. m=0;
  40. for(i=0;i<k;i++)
  41. {
  42. if(tab1[i][1]==d)
  43. {
  44. tab2[i]=tab1[i][2];
  45. if(tab1[i][0]>m) m=tab1[i][0];
  46. w=100000;
  47. for(j=0;j<k;j++)
  48. {
  49. if(tab1[j][0]==d && tab2[j]<w) w=tab2[j];
  50. }
  51. if(w<100000) tab2[i]+=w;
  52. k4=0;
  53. }
  54. }
  55. if(k4==1) break;
  56. d=m;
  57. }
  58. if(k4==1 && k3==1) cout << tab2[k3] << endl;
  59. else if(k4==1 && k3==0) cout << "NO" << endl;
  60. else
  61. {
  62. w=100000;
  63. for(i=0;i<k;i++)
  64. {
  65. if(tab1[i][0]==s && tab2[i]<w) w=tab2[i];
  66. }
  67. cout << w << endl;
  68. }
  69. }
  70. }
  71.  
  72.  
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 4420KB
stdin
3
3 2
1 2 5
2 3 7
1 3
3 3
1 2 4
1 3 7
2 3 1
1 3
3 1
1 2 4
1 3
stdout
12
5
NO