Problem:
Score : 400 points

Problem Statement

An SNS has N users - User 1, User 2, \cdots, User N.

Between these N users, there are some relationships - M friendships and K blockships.

For each i = 1, 2, \cdots, M, there is a bidirectional friendship between User A_i and User B_i.

For each i = 1, 2, \cdots, K, there is a bidirectional blockship between User C_i and User D_i.

We define User a to be a friend candidate for User b when all of the following four conditions are satisfied:

a \neq b.

There is not a friendship between User a and User b.

There is not a blockship between User a and User b.

There exists a sequence c_0, c_1, c_2, \cdots, c_L consisting of integers between 1 and N (inclusive) such that c_0 = a, c_L = b, and there is a friendship between User c_i and c_{i+1} for each i = 0, 1, \cdots, L - 1.

For each user i = 1, 2, ... N, how many friend candidates does it have?

Constraints

All values in input are integers.

2 ≤ N ≤ 10^5

0 \leq M \leq 10^5

0 \leq K \leq 10^5

1 \leq A_i, B_i \leq N

A_i \neq B_i

1 \leq C_i, D_i \leq N

C_i \neq D_i

(A_i, B_i) \neq (A_j, B_j) (i \neq j)

(A_i, B_i) \neq (B_j, A_j)

(C_i, D_i) \neq (C_j, D_j) (i \neq j)

(C_i, D_i) \neq (D_j, C_j)

(A_i, B_i) \neq (C_j, D_j)

(A_i, B_i) \neq (D_j, C_j)

Input

Input is given from Standard Input in the following format:

N M K
A_1 B_1
\vdots
A_M B_M
C_1 D_1
\vdots
C_K D_K

Output

Print the answers in order, with space in between.

Sample Input 1

4 4 1
2 1
1 3
3 2
3 4
4 1

Sample Output 1

0 1 0 1

There is a friendship between User 2 and 3, and between 3 and 4. Also, there is no friendship or blockship between User 2 and 4. Thus, User 4 is a friend candidate for User 2.

However, neither User 1 or 3 is a friend candidate for User 2, so User 2 has one friend candidate.

Sample Input 2

5 10 0
1 2
1 3
1 4
1 5
3 2
2 4
2 5
4 3
5 3
4 5

Sample Output 2

0 0 0 0 0

Everyone is a friend of everyone else and has no friend candidate.

Sample Input 3

10 9 3
10 1
6 7
8 2
2 5
8 4
7 3
10 9
6 4
5 8
2 6
7 5
3 1

Sample Output 3

1 3 5 4 3 3 3 3 1 0

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int MAX = 100005;
const int MOD = 1000000007;

#define F first
#define S second

void solve()
{
	
	return;
}
vector<vector<ll>> adj,block;
vector<ll> visit;
map<ll,ll> mp,mp2;
//map<ll,vector<ll>> mp2;

ll comp=0,ct=0;
void dfs(ll i)
{
	ct+=1;
	mp[comp]=ct;
	visit[i]=comp;
	//mp2[i]=comp;
	//mp2[comp].push_back(i);
	for(ll node:adj[i])
	{
		if(visit[node]==0)
		{
			//ct++;
			dfs(node);
		}

	}
	return;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	ll n,m,k;
	cin>>n>>m>>k;
	adj.assign(n,vector<ll>());
	block.assign(n,vector<ll>());
	for(int i=0;i<m;i++)
	{
		ll a,b;
		cin>>a>>b;
		a--,b--;
		adj[a].push_back(b);
		adj[b].push_back(a);
	}
	for(auto i: adj)
	{
		sort(i.begin(),i.end());
	}
	visit.assign(n,0);
	for(int i=0;i<k;i++)
	{
		ll a,b;
		cin>>a>>b;
		a--,b--;
		block[a].push_back(b);
		block[b].push_back(a);
	}
	for(int i=0;i<n;i++)
	{
		if(visit[i]==0)
		{
			comp+=1;
			ct=0;
			dfs(i);
		}
	}
	// for(auto i: mp2)
	// {
	// 	sort(i.S.begin(),i.S.end());
	// }
	// for(auto i: mp)
	// {
	// 	cout<<i.F<<" "<<i.S<<endl;
	// }
	for(int i=0;i<n;i++)
	{
		ll ct=0;
		for(ll node:block[i])
		{
			if(visit[i]==visit[node])
			{
				vector<ll>::iterator low;
				//if(adj[i].size()>0)
				{
					low=lower_bound(adj[i].begin(),adj[i].end(),node);
					if(*low!=node)
						ct++;
				}
			}
		}
		ll x=mp[visit[i]];
		x-=(adj[i].size()+1+ct);
		x=max(x,0LL);
		cout<<x<<" ";
	}
	cout<<"\n";
	return 0;
}