Cod sursa(job #2126774)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 9 februarie 2018 22:48:05
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
///#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
const int nmax=1000;
struct data
{
    int nod,flow,use;
};
int n,m;
vector<data>v[nmax+5]; int l[nmax+5];
bool viz[nmax+5],gata=0;
int stiva[nmax+5],vf;
int S,D;
void dfs(int nod,int MI)
{
    if(gata==1)
        return;
    if(nod==D)
    {
        int nod_start=1;
        for(int i=1;i<=vf;i++)
        {
            v[nod_start][stiva[i]].use+=MI;
            nod_start=v[nod_start][stiva[i]].nod;
        }
        gata=1;
        return;
    }
    viz[nod]=1;
    for(int i=0;i<l[nod];i++)
    {
        int rezid;
        rezid=v[nod][i].flow-v[nod][i].use;
        if(rezid>0 and viz[v[nod][i].nod]==0)
        {
            vf++;
            stiva[vf]=i;
            dfs(v[nod][i].nod,min(rezid,MI));
            vf--;
        }
    }
}
void curata()
{
    for(int i=1;i<=n;i++)
        viz[i]=0;
}
bool s[nmax+5],d[nmax+5];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        s[i]=d[i]=1;
    while(m--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        v[a].push_back({b,c,0});
        s[a]=0;
        d[b]=0;
        l[a]++;
    }
    for(int i=1;i<=n;i++)
    {
        if(d[i]==1)
            S=i;
        if(s[i]==1)
            D=i;
    }
    cout<<S<<" "<<D<<"\n";
    return 0;
    while(1)
    {
        gata=0;
        dfs(S,2e9);
        curata();
        if(gata==0)
            break;
    }
    int ans=0;
    for(int nod=1;nod<=n;nod++)
        for(int i=0;i<l[nod];i++)
            if(v[nod][i].nod==D)
                ans+=v[nod][i].use;
    cout<<ans;
    return 0;
}
/**
**/