Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 55;
  5. bool friendly[N];
  6. int dp[N][1005];
  7. queue <pair<int, int>> q;
  8. bool in_q[N][1005];
  9. int n;
  10. const int INF = N*100;
  11.  
  12. struct edge{
  13. int y, T, W;
  14. };
  15.  
  16. vector <edge> v[N];
  17.  
  18. int isEnough(int k){
  19. for(int i = 1;i <= n;i++){
  20. for(int j = 0;j <= k;j++){
  21. dp[i][j] = INF;
  22. }
  23. }
  24. dp[1][k] = 0;
  25. q.push({1, k});
  26. while(q.empty() == false){
  27. int node, w;
  28. node = q.front().first;
  29. w = q.front().second;
  30. q.pop();
  31. in_q[node][w] = 0;
  32. if(friendly[node]){
  33. dp[node][k] = dp[node][w];
  34. w = k;
  35. }
  36. for(auto it : v[node]){
  37. if(w >= it.W && dp[node][w] + it.T < dp[it.y][w - it.W]){
  38. dp[it.y][w - it.W] = dp[node][w] + it.T;
  39. if(in_q[it.y][w - it.W] == 0){
  40. in_q[it.y][w - it.W] = 1;
  41. q.push({it.y, w - it.W});
  42. }
  43. }
  44. }
  45. }
  46. int sol = INF;
  47. for(int i = 0;i <= k;i++){
  48. sol = min(sol, dp[n][i]);
  49. }
  50. return (sol == INF ? 0 : sol);
  51. }
  52.  
  53. int main(){
  54. ifstream fin("lanterna.in");
  55. ofstream fout("lanterna.out");
  56. int k,m,i;
  57. fin>>n>>k;
  58. for(i = 1;i <= n;i++){
  59. fin>>friendly[i];
  60. }
  61. fin>>m;
  62. for(i = 1;i <= m;i++){
  63. edge t;
  64. int x,y;
  65. fin>>x>>y>>t.T>>t.W;
  66. t.y = y;
  67. v[x].push_back(t);
  68. t.y = x;
  69. v[y].push_back(t);
  70. }
  71. int lf, rg, md, sol;
  72. lf = 1;
  73. rg = k;
  74. sol = k;
  75. int tmin = isEnough(k);
  76. while(lf <= rg){
  77. md = (lf + rg)/2;
  78. int cmin = isEnough(md);
  79. if(cmin == tmin){
  80. sol = min(sol, md);
  81. rg = md - 1;
  82. }else{
  83. lf = md + 1;
  84. }
  85. }
  86. fout<<tmin<<' '<<sol;
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement