Language: C++

#include <bits/stdc++.h>

using namespace std;
using llint = long long int ;

#define rep(i,c) for(int i = 0; i < (int)c; ++i)
// c 回繰り返す

////////////////////////////////////////////////////////////////
//////////////////////////クラス構造体///////////////////////////
class UnionFind
{//UnionFind木 Nの数に注意　0=<x<N　まで作られる
private:
    vector<int> par;
public:
    UnionFind(int N) : par(N){//初期化コンストラクタ 根を初期化
    for (int i = 0; i < N; i++) par[i]=i;
    }

    int root(int x){//データxの根を返す
    if (par[x]==x) return x;//par[x]==xのときｘは木の根である
    return par[x]=root(par[x]);//経路圧縮
    }

    void unite(int x,int y){//xの根とyの根を同じにする
    int rx=root(x);
    int ry=root(y);
    if (rx==ry) return;//xの根とyの根が同じとき　なにもしない
    par[rx]=ry;//違うとき　根をおなじにする
    }

    bool same(int x,int y){//根が同じとき TRUE
        return root(x)==root(y);
    }

};
///////////////////////////////////////////////////////////






int main(){
    int N,M,K;
    int A[110],B[110],C[110],D[110];
    cin>>N>>M>>K;
    rep(i,M) cin>>A[i]>>B[i];
    rep(i,K) cin>>C[i]>>D[i];

    UnionFind frie(N+1);
    rep(i,M) frie.unite(A[i],B[i]);

    int count[110]={0};
    for (int i = 1; i < N+1; i++)
    {
        for (int j = i+1; j < N+1; j++)
        {
            bool check=true;
            if (frie.same(i,j))
            {
                for (int k = 0; k < M; k++)
                {
                    if ((i==A[k]&&j==B[k])||(i==B[k]&&j==A[k]))
                    {
                        check=false;
                    }
                    
                }
                for (int l= 0; l < K; l++)
                {
                    if ((i==C[l]&&j==D[l])||(i==D[l]&&j==C[l]))
                    {
                        check=false;
                    }
                    
                }
                
                
            }
            else check=false;
            if(check){
                ++count[i];
                ++count[j];
                }
            
        }
        
    }
    for (int i = 1; i < N+1; i++)
    {
        cout<<count[i]<<" ";
    }
    cout<<endl;
    return 0;
}

#include <bits/stdc++.h>

using namespace std;
using llint = long long int ;

#define rep(i,c) for(int i = 0; i < (int)c; ++i)
// c 回繰り返す
const llint mod = 1000000007;
//mod　10^9 + 7


///////////////////////便利？な関数///////////////////////
llint Pow_Mod(llint n,llint p,llint m){
    //n^p mod　の繰り返し二乗法
    if(p==0) return 1%m;
    else if(p%2==0){
        llint kakeru = Pow_Mod(n,p/2,m);
        return kakeru*kakeru%m;
    }
    else return n%m*Pow_Mod(n,p-1,m)%m;
}

llint Conbi(llint x,llint y,llint m){
    //xCy mod を求める
    llint UP,DOWN;
    UP=DOWN=1%m;
    rep(i,y){
        UP=UP*(x-i)%m;
        DOWN=DOWN*(i+1)%m;
    }
    return UP*Pow_Mod(DOWN,m-2,m)%m;
    //mは素数がいい
}

////////////////////////////////////////////////////////////////
//////////////////////////クラス構造体///////////////////////////
class UnionFind
{//UnionFind木 Nの数に注意　0=<x<N　まで作られる
private:
    vector<int> par;
public:
    UnionFind(int N) : par(N){//初期化コンストラクタ 根を初期化
    for (int i = 0; i < N; i++) par[i]=i;
    }

    int root(int x){//データxの根を返す
    if (par[x]==x) return x;//par[x]==xのときｘは木の根である
    return par[x]=root(par[x]);//経路圧縮
    }

    void unite(int x,int y){//xの根とyの根を同じにする
    int rx=root(x);
    int ry=root(y);
    if (rx==ry) return;//xの根とyの根が同じとき　なにもしない
    par[rx]=ry;//違うとき　根をおなじにする
    }

    bool same(int x,int y){//根が同じとき TRUE
        return root(x)==root(y);
    }

};
///////////////////////////////////////////////////////////






int main(){
    int N,M,K;
    int A[110],B[110],C[110],D[110];
    cin>>N>>M>>K;
    rep(i,M) cin>>A[i]>>B[i];
    rep(i,K) cin>>C[i]>>D[i];

    UnionFind frie(N+1);
    rep(i,M) frie.unite(A[i],B[i]);

    int count[110]={0};
    for (int i = 1; i < N+1; i++)
    {
        for (int j = i+1; j < N+1; j++)
        {
            bool check=true;
            if (frie.same(i,j))
            {
                for (int k = 0; k < M; k++)
                {
                    if ((i==A[k]&&j==B[k])||(i==B[k]&&j==A[k]))
                    {
                        check=false;
                    }
                    
                }
                for (int l= 0; l < K; l++)
                {
                    if ((i==C[l]&&j==D[l])||(i==D[l]&&j==C[l]))
                    {
                        check=false;
                    }
                    
                }
                
                
            }
            else check=false;
            if(check){
                ++count[i];
                ++count[j];
                }
            
        }
        
    }
    for (int i = 1; i < N+1; i++)
    {
        cout<<count[i]<<" ";
    }
    cout<<endl;
    return 0;
}



Compiler output:
a.cc:134:7: error: redefinition of 'class UnionFind'
  134 | class UnionFind
      |       ^~~~~~~~~
a.cc:11:7: note: previous definition of 'class UnionFind'
   11 | class UnionFind
      |       ^~~~~~~~~
a.cc:167:5: error: redefinition of 'int main()'
  167 | int main(){
      |     ^~~~
a.cc:44:5: note: 'int main()' previously defined here
   44 | int main(){
      |     ^~~~