Deep Learning study

백준 17471문제 본문

백준 문제 코드

백준 17471문제

HwaniL.choi 2019. 12. 7. 00:15
반응형
#include <bits/stdc++.h>
using namespace std;

int N, pop[12],visit[12],divi[12],ANS = 1e9;
vector<vector<int>> G;

void dfs(int cur, int division){
    visit[cur] = 1;

    for(int next : G[cur])
        if(!visit[next] && divi[next] == division)
            dfs(next, division);
}

void update(){
    int div0 = -1, div1 = -1;

    for(int i=0 ;i<N ;i++)
        if(divi[i] == 0) div0 = i;
        else div1= i; 

    if(div0 != -1 && div1 != -1){
        dfs(div0, 0) , dfs(div1,1);
        bool flag = true;
        for(int i=0 ; i<N ; i++) if(!visit[i]) flag = false;
        if(flag){
            int pop0 = 0, pop1 = 0;
            for(int i=0 ;i<N;i++) if(divi[i] == 0) pop0 += pop[i];
            for(int i=0 ;i<N;i++) if(divi[i] == 1) pop1 += pop[i];
            ANS = min(ANS, abs(pop0 - pop1));
        }
    }
    memset(visit, 0 , sizeof(visit));
}

void div(int cur){ 
    if(cur >= N){
        update();
        return;
    }

    divi[cur] = 1;
    div(cur + 1);
    divi[cur] = 0;
    div(cur + 1);
}

int main(){
    cin >> N;
    G.resize(N);

    for(int i=0; i<N ; i++) cin >> pop[i];

    for(int i=0; i<N ; i++){
        int k; cin >> k;
        for(;k>0;k--){
            int p; cin >> p;
            G[i].push_back(p-1);
        }
    }

    div(0);

    cout << (ANS == 1e9 ? -1 : ANS) << endl;

    return 0;
}

백준 게리맨더링 문제 풀이입니다.

반응형

'백준 문제 코드' 카테고리의 다른 글

백준 3945문제  (0) 2019.12.08
백준 17406문제  (0) 2019.12.07
백준 16637문제  (0) 2019.12.05
백준 17281문제  (0) 2019.11.24
백준 17136문제  (0) 2019.11.24
Comments