제출 #1297316

#제출 시각아이디문제언어결과실행 시간메모리
1297316SzymonKrzywdaSvjetlo (COCI20_svjetlo)C++20
0 / 110
2095 ms6240 KiB
#include <iostream>
#include <vector>


using namespace std;

const int MAXN = 1e5;
vector<int> graf[MAXN];
vector<int> akt;
vector<int> ans;
int n;
string s;


void rek(int val) {
    if (val == 0) {
        for (int i = 1; i <= n; i++) {
            akt.push_back(i);
            rek(val + 1);
            akt.pop_back();
        }
        return;
    }

    vector<int> ile(n, 0);
    for (int val : akt) ile[val - 1] ++;
    bool git = 1;
    for (int i = 0; i < n; i++) {
        if (s[i] - '0' == ile[i] % 2) git = 0;
    }
    if (git) {
        if (ans.size() > akt.size() || ans.size() == 0) ans = akt;
    }



    if (val == 2 * n || val > (ans.size() == 0 ? 1e9 : ans.size())) return;
    int v = akt.back();
    for (int s : graf[v]) {
        akt.push_back(s);
        rek(val + 1);
        akt.pop_back();
    }


}


int main() {
    int a, b;
    cin >> n;

    cin >> s;

    for (int i = 0; i < n - 1; i++) {
        cin >> a >> b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    rek(0);

    cout << ans.size() << '\n';

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...