Guest User

Untitled

a guest
Feb 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. int N,M;
  4. int capacity[210][210];
  5. class node
  6. {
  7. public:
  8. int n;
  9. int pre;
  10. };
  11. node queue[210];
  12. int q_size;
  13. bool visit[210];
  14. bool BFS()//get to end
  15. {
  16.  
  17. for (int i = 1 ; i<=M; i++)
  18. {
  19. visit[i] = false;
  20. }
  21. q_size = 0;
  22. queue[q_size].n = 1;
  23. visit[1] = true;
  24. queue[q_size].pre = -1;
  25.  
  26. q_size++;
  27. for ( int i = 0 ; i<q_size; i++ )
  28. {
  29. for (int k = 1; k<=M; k++)
  30. {
  31. if (capacity[queue[i].n][k]>0&&visit[k]==false)//set visit!!
  32. {
  33. queue[q_size].n = k;
  34. visit[k] = true;
  35. queue[q_size].pre = i;
  36. q_size++;
  37. if (k==M) return true;
  38. }
  39. }
  40. }
  41. return false;
  42. }
  43. int main()
  44. {
  45. ifstream fin("ditch.in");
  46. ofstream fout("ditch.out");
  47. fin>>N>>M;
  48. for (int i = 0; i<N; i++)
  49. {
  50. int a,b,c;
  51. fin>>a>>b>>c;
  52. capacity[a][b]+=c;
  53. }
  54.  
  55.  
  56.  
  57. //get the path in the queue :0-q_size-1
  58. int max_flow = 0;
  59. while(BFS())
  60. {
  61. //find the min capacity along the path
  62. int min_capacity = 0x7fffffff;
  63. int i = q_size-1;
  64. while (i)
  65. {
  66. if(capacity[queue[queue[i].pre].n][queue[i].n]<min_capacity)
  67. min_capacity = capacity[queue[queue[i].pre].n][queue[i].n];
  68. i = queue[i].pre;
  69. }
  70. //augment the path
  71. max_flow += min_capacity;
  72.  
  73. i = q_size-1;
  74. while (i)
  75. {
  76.  
  77. capacity[queue[queue[i].pre].n][queue[i].n] -= min_capacity;
  78. capacity[queue[i].n][queue[queue[i].pre].n] += min_capacity;
  79. i = queue[i].pre;
  80. }
  81.  
  82. }
  83. fout<<max_flow<<endl;
  84.  
  85.  
  86. fin.close();
  87. fout.close();
  88. return 0;
  89. }
Add Comment
Please, Sign In to add comment