#include<iostream>
#include<vector>
#include<map>
#include<deque>
using namespace std;


int main(){
    int N, M, K;
    int A, B, C, D;
    int temp_hito, yougisya;
    int count, group_count = 0;
    vector<vector<int>> groups;
    vector<int> group;
    map<int, vector<int>> friend_map;
    map<int, vector<int>> bl_map;
    deque<int> tomodachi_chain;

    std::cin >> N >> M >> K;
    //探査フラグの初期化用
    vector<int> flag_ini(N, 0);
    vector<int> tansaku_rireki(N), group_id(N), bl_list(N,0);    

    for(int i = 0; i < M; i++){
        //friend関係を格納していく
        std::cin >> A >> B;
        if(friend_map.count(A)){
            friend_map[A].push_back(B);
        }else{
            friend_map[A] = {B};
        }

        if(friend_map.count(B)){
            friend_map[B].push_back(A);
        }else{
            friend_map[B] = {A};
        }
    }


    tansaku_rireki = flag_ini;

    for(int i = 0; i < N; i++){
        //friend_chainを作っていく
        if(tansaku_rireki[i] == 0){
            group = {};
            //まだどこのグループにも属してない人を見つけたら..
            tomodachi_chain.push_back(i + 1);
            tansaku_rireki[i] = 1;            
            while(tomodachi_chain.size() != 0){
                //一人を始点にdequeで友達チェインしていく
                temp_hito = tomodachi_chain[0];
                tomodachi_chain.pop_front();
                group.push_back(temp_hito);
                group_id[temp_hito - 1] = group_count;
                if(friend_map.count(temp_hito)){
                    for(int j = 0; j < friend_map[temp_hito].size(); j++){
                        if(tansaku_rireki[friend_map[temp_hito][j] - 1]==0){
                            tomodachi_chain.push_back(friend_map[temp_hito][j]);
                            tansaku_rireki[friend_map[temp_hito][j] - 1] = 1;
                            group_id[friend_map[temp_hito][j] - 1] = group_count;
                        }
                    }
                }
            } 
            //1グループ作り終わったらグループリストに追加
            groups.push_back(group);
            group_count++;
        }

    }

    for(int i = 0; i < K; i++){
        //block関係を格納していく
        //格納というか，1次元リストにブロック数をいれてしまう。
        std::cin >> A >> B;
        if(group_id[A-1]==group_id[B-1]){
            bl_list[A-1]++;
            bl_list[B-1]++;
        }
    }
    //入力終了


    //デバッグプリント
    // for(int i = 0; i < groups.size(); i++){
    //     for(int j = 0; j < groups[i].size(); j ++){
    //         std::cout << groups[i][j] << " ";
    //     }
    //     std::cout << "\n";
    // }
    // std::map<int, vector<int>>::iterator iter = friend_map.begin();
    // for(int i = 0; i < friend_map.size(); i++){
    //     std::cout << iter->first << "\n";
    //     for(int j = 0; j < iter->second.size(); j++){
    //         std::cout << iter->second[j] << " ";
    //     }
    //     std::cout << "\n";
    //     iter++;        
    // }
    // std::cout << "\n";

    //グループ作り終了
    //いよいよ候補探し
    for(int i = 0; i < N; i++){
        count = groups[group_id[i]].size() - 1;
        count = count - bl_list[i];
        if(friend_map.count(i + 1)){
            count = count - friend_map[i + 1].size();
        }
        std::cout << count << " ";
    }

}

Measured memory_bytes: 17428