1530 bool contradict =
false;
1531 while(!que.empty()) {
1532 auto current = que.front();
1534 if(um.contains(current.person)) {
1536 if(um[current.person] != current.good) {
1538 return pair<int, unordered_map<int, bool>>(0, {});
1541 um.insert(pair(current.person, current.good));
1545 for(
int j = 0; j < statements.size(); j++) {
1546 if(statements[current.person][j] != 2 && j != current.person) {
1547 auto nmsg = msg(j, statements[current.person][j] == 1);
1548 if(um.contains(nmsg.person)) {
1550 if(um[nmsg.person] != nmsg.good) {
1553 return pair<int, unordered_map<int, bool>>(0, {});
1565 auto dup = unordered_map<int, bool>();
1566 for(
int i = 0; i < statements.size(); i++) {
1570 if(!um.contains(i)) {
1572 for(
auto v: statements[i]) {
1578 um.insert(pair(i,
true));
1581 auto nque = queue<msg>();
1582 nque.push(msg(i,
true));
1583 auto ans =
dfs(statements, um, nque);
1584 maximum = max(maximum, ans.first);
1585 for(
auto it: ans.second) {
1599 maximum = max(maximum, good_count);
1601 return pair(maximum, um);
static pair< int, unordered_map< int, bool > > dfs(vector< vector< int > > &statements, unordered_map< int, bool > um, queue< msg > que)