fork(2) download
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include<set>
  6. #include <cmath>
  7. #include<sstream>
  8. #include<queue>
  9. #include<istream>
  10. #include<vector>
  11. #include<stdio.h>
  12. #include<stack>
  13. #include<deque>
  14. #include<bitset>
  15. #include<string>
  16. #include<cstdio>
  17. #include<map>
  18. #include<iterator>
  19. #include<iomanip>
  20. #define prfs(x) printf("%s\n",x.c_str())
  21. #define prfi(x) printf("%d\n",x);
  22. #define sfi(X) scanf("%d",&X);
  23. #define lop(i,n) for (int i = 0 ; i < n ;i++)
  24. #define blop(i,n) for(int i = n-1 ; i>=0;i--)
  25. #define M_P make_pair
  26. #define All(X) (X).begin(),(X).end()
  27. #define SZ(n) (int)(n).size()
  28. #define voi vector<int>
  29. #define Allr(X) (X).rbegin(),(X).rend()
  30. #define vos vector<string>
  31. #define vob vector<bool>
  32. #define vovi vector<vector<int > >
  33. #define vob vector<bool>
  34. #define ll long long
  35. using namespace std;
  36. vector<vector<int> > g;
  37. int X, Z;
  38. double Y;
  39. struct river {
  40. double capacity =10000000.0;
  41. double initial = 0.0;
  42.  
  43. };
  44.  
  45. map<int, river> MAP;
  46. int main()
  47. {
  48. int N, K;scanf("%d%d", &N, &K);
  49. for (int i = 0;i < N; i++)
  50. {
  51. double cap;
  52. double inti;
  53. cin >> cap >> inti;
  54. MAP[i].capacity = cap, MAP[i].initial = inti;
  55. }
  56. g.resize(N);
  57. for (int j = 0;j < K; j++)
  58. {
  59. int From, To;
  60. scanf("%d%d", &From, &To);
  61. From--, To--;
  62. g[From].push_back(To);
  63.  
  64. }
  65.  
  66. cin >> X >> Y >> Z;
  67. queue < pair<int,double> > q;
  68.  
  69. q.push(M_P(X-1, Y));
  70. while (!q.empty())
  71. {
  72. int u = q.front().first;
  73. double z = q.front().second;
  74. q.pop();
  75.  
  76. if (MAP[u].capacity - MAP[u].initial < z)
  77. {
  78. z -= (MAP[u].capacity - MAP[u].initial);
  79. MAP[u].initial = MAP[u].capacity;
  80. }
  81. else
  82. {
  83. MAP[u].initial += z;
  84. continue;
  85. }
  86.  
  87.  
  88.  
  89. for (int i = 0; i < g[u].size(); i++)
  90. {
  91. q.push(M_P(g[u][i],z/g[u].size()));
  92. }
  93.  
  94.  
  95. }
  96. cout << MAP[Z - 1].initial<< endl;
  97. return 0;
  98. }
Success #stdin #stdout 0s 3244KB
stdin
4 3
10 10
4 0
4 0
4 0
1 2
1 3
1 4
1 5 4
stdout
1.66667