Pagini recente » Cod sursa (job #1087132) | Cod sursa (job #1830318) | Cod sursa (job #1776414) | Cod sursa (job #1350058) | Cod sursa (job #3305815)
#include <iostream>
#include <deque>
#include <algorithm>
#include <vector>
using namespace std;
int v[501][501];
int v1[501][501];
int par[501],n;
int viz[501];
vector<pair<int,int>> rasp;
deque<int> q;
bool pot(){
int i,nod;
q.clear();q.push_back(1);
for(i=0;i<=n;i++) viz[i]=0;
viz[1]=1;
while(!q.empty()){
nod=q.front();q.pop_front();
for(i=1;i<=n;i++){
if(v[nod][i] && !viz[i]){
viz[i]=1;par[i]=nod;q.push_back(i);
}
}
}
return viz[n];
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);
int i,j,a,b,m,poz,aux,aux1,flow;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>a>>b;
v[a][b]++;v[b][a]++;
v1[a][b]++;v1[b][a]++;
}
while(pot()){
aux=n;flow=1e9;
while(aux!=1){
aux1=par[aux];
flow=min(flow,v[aux1][aux]);
aux=par[aux];
}
aux=n;
while(aux!=1){
aux1=par[aux];
v[aux1][aux]-=flow;
v[aux][aux1]+=flow;
aux=par[aux];
}
}
pot();
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(viz[i] && !viz[j] && v1[i][j]) rasp.push_back({i,j});
}
}
cout<<rasp.size()<<"\n";
for(auto it: rasp) cout<<it.first<<" "<<it.second<<"\n";
return 0;
}