Cod sursa(job #3305815)

Utilizator PetruApostolApostol Mihnea Petru PetruApostol Data 5 august 2025 14:39:50
Problema Taramul Nicaieri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#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;
}