Language: C++

#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <string>
#include <map>
#include <iomanip>
#define rep(i,N) for(int i=0; i<N;i++)
using namespace std;

class Group{
    public:
        int member=0;
        bool reliable=true;
        void addMember(){member++;}
        void untrust(){reliable=false;}
};
class Person{
    public:
        int num;
        int group;
        vector<int> person;
        vector<int> statement;
        void addPerson(int p){person.push_back(p);}
        void addStatement(int s){statement.push_back(s);}
        int getPerson(int i){return person[i];}
        int getStatement(int i){return statement[i];}
};

int main(){
    int N;
    cin >>N;
    vector<Person> A(N);
    rep(i,N){
        cin>>A[i].num;
        rep(j,A[i].num){
            int p,s;
            cin >> p >>s;
            A[i].addPerson(p);
            A[i].addStatement(s);
        }
    }
    int num_group=0;
    vector<Group> g(num_group);
    rep(i,N){
//        cout << A[i].num <<endl;
        if(A[i].group==0){
            num_group++;
            A[i].group=num_group;
            Group g1;
            g1.addMember();
            g.push_back(g1);
        }
        rep(j,A[i].num){
//            cout <<"j" <<j <<" "<< A[i].getStatement(j)<<endl;
            //相手を信用している場合
            if(A[i].getStatement(j)==1){
                //もし相手のグループ番号と自分の番号が同じなら何もしない
                if(A[A[i].getPerson(j)-1].group==A[i].group){
                    continue;
                //もし相手がどのグループに所属していない場合
                }else if(A[A[i].getPerson(j)-1].group==0){
                    A[A[i].getPerson(j)-1].group=A[i].group;
                    g[A[i].group-1].addMember();
                //もし相手がすでに別のグループに所属していた場合
                }else if(A[A[i].getPerson(j)-1].group!=A[i].group){
                    g[A[i].group-1].untrust();
                    g[A[i].group-1].member=0;
                }
            //相手を信用していない場合
            }else if(A[i].getStatement(j)==0){
                //もし相手のグループ番号と自分の番号が同じならグループ全体が信用できない
                if(A[A[i].getPerson(j)-1].group==A[i].group){
                    g[A[i].group-1].untrust();
                    g[A[i].group-1].member=0;
                //もし相手がグループに所属していない場合
                }else if(A[A[i].getPerson(j)-1].group==0){
                    Group g2;
                    g2.addMember();
                    g.push_back(g2);
                    num_group++;
                    A[A[i].getPerson(j)-1].group=num_group;
                //もし相手がすでに別のグループに所属していた場合
                }else if(A[A[i].getPerson(j)-1].group!=A[i].group){
                    continue;
                }
            }
        }
    
    }
    rep(i,N){
        if(A[i].group==0){
            Group g3;
            g3.addMember();
            g.push_back(g3);
//    rep(i,N){
//        cout<<"member :"<<i+1<<" Group :"<<A[i].group<<" reliable :"<<g[A[i].group-1].reliable<<endl;
//    }
    int max=0;
    rep(i,g.size()){
        //cout << g[i].member<<endl;
        if(g[i].reliable==true){
            if(g[i].member>max){
                max=g[i].member;
            }
        }
    }
    cout <<max <<endl;
    return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:110:2: error: expected '}' at end of input
  110 | }
      |  ^
a.cc:91:13: note: to match this '{'
   91 |     rep(i,N){
      |             ^
a.cc:110:2: error: expected '}' at end of input
  110 | }
      |  ^
a.cc:30:11: note: to match this '{'
   30 | int main(){
      |           ^