본문 바로가기
IT/BOJ

백준(BOJ) 2188 축사 배정 ***

by 빨강자몽 2018. 6. 1.

네트워크 플로우에 대해 공부하고 풀어야 할 문제


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <math.h>
#include <queue>
#include <set>
#include <list>
#include <utility>
#include <functional>
#define MAX 405
#define INF 987654321
#define MOD 1000000
typedef long long ll;
#pragma warning(disable:4996)
using namespace std;

int n,m,a,b,c,st=401,dest=402,total=0,flow[2][MAX][MAX];
vector<int> v[MAX];
queue<int> q;
bool visit[MAX][MAX],tf[MAX];


int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        flow[1][401][i]=1;
        v[401].push_back(i);
        scanf("%d",&a);
        for(int k=0;k<a;k++)
        {
            scanf("%d",&b);
            flow[1][i][b+200]=1;
            if(tf[b+200]==false)
            {
                flow[1][b+200][402]=1;
                v[b+200].push_back(402);
                tf[b+200]=true;
            }
            v[i].push_back(b+200);
            v[b+200].push_back(i);
        }
    }
    while(1)
    {
        int prev[MAX];
        fill_n(&prev[0],MAX,-1);
        q.push(st);
        while(!q.empty())
        {
            int cur=q.front();
            q.pop();
            for(int k=0;k<v[cur].size();k++)
            {
                if(prev[v[cur][k]]==-1&&flow[1][cur][v[cur][k]]-flow[0][cur][v[cur][k0)
                {
                    prev[v[cur][k]]=cur;
                    q.push(v[cur][k]);
                    if(v[cur][k]==dest)
                        break;
                }
            }
        }
        if(prev[dest]==-1)
            break;
        int tmp=dest;
        while(tmp!=st)
        {
            flow[0][prev[tmp]][tmp]+=1;
             flow[0][tmp][prev[tmp]]-=1;
            tmp=prev[tmp];
        }
        total++;
    }
    printf("%d\n",total);
    return 0;
}


'IT > BOJ' 카테고리의 다른 글

백준(BOJ) 3190 뱀 **  (0) 2018.06.01
백준(BOJ) 3048 개미 *  (0) 2018.06.01
백준(BOJ) 6086 최대 유량 ***  (0) 2018.06.01
백준(BOJ) 5676 음주코딩 **  (0) 2018.06.01
백준(BOJ) 11505 구간 곱 구하기 *  (0) 2018.06.01