Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- int N,M;
- int capacity[210][210];
- class node
- {
- public:
- int n;
- int pre;
- };
- node queue[210];
- int q_size;
- bool visit[210];
- bool BFS()//get to end
- {
- for (int i = 1 ; i<=M; i++)
- {
- visit[i] = false;
- }
- q_size = 0;
- queue[q_size].n = 1;
- visit[1] = true;
- queue[q_size].pre = -1;
- q_size++;
- for ( int i = 0 ; i<q_size; i++ )
- {
- for (int k = 1; k<=M; k++)
- {
- if (capacity[queue[i].n][k]>0&&visit[k]==false)//set visit!!
- {
- queue[q_size].n = k;
- visit[k] = true;
- queue[q_size].pre = i;
- q_size++;
- if (k==M) return true;
- }
- }
- }
- return false;
- }
- int main()
- {
- ifstream fin("ditch.in");
- ofstream fout("ditch.out");
- fin>>N>>M;
- for (int i = 0; i<N; i++)
- {
- int a,b,c;
- fin>>a>>b>>c;
- capacity[a][b]+=c;
- }
- //get the path in the queue :0-q_size-1
- int max_flow = 0;
- while(BFS())
- {
- //find the min capacity along the path
- int min_capacity = 0x7fffffff;
- int i = q_size-1;
- while (i)
- {
- if(capacity[queue[queue[i].pre].n][queue[i].n]<min_capacity)
- min_capacity = capacity[queue[queue[i].pre].n][queue[i].n];
- i = queue[i].pre;
- }
- //augment the path
- max_flow += min_capacity;
- i = q_size-1;
- while (i)
- {
- capacity[queue[queue[i].pre].n][queue[i].n] -= min_capacity;
- capacity[queue[i].n][queue[queue[i].pre].n] += min_capacity;
- i = queue[i].pre;
- }
- }
- fout<<max_flow<<endl;
- fin.close();
- fout.close();
- return 0;
- }
Add Comment
Please, Sign In to add comment