可能出现的最大度数=目前度数最大值+森林个数-1+min(m-目前最大度数,k);
#include <bits/stdc++.h>
using namespace std;
#define MAX(x,y) (x>y)?x:y
#define MIN(x,y) (x<y)?x:y
#define M 200010
vector<int> edge[M];
int main()
{
int t,n,m,k,i,u,v,max,size;
scanf("%d",&t);
while(t--){
scanf("%d %d %d",&n,&m,&k);
for(i=0;i<M;i++)
edge[i].clear();
for(i=0;i<m;i++){
scanf("%d %d",&u,&v);
edge[u].push_back(v);
edge[v].push_back(u);
}
max=0;
for(i=0;i<n;i++){
size=(int) edge[i].size();
max=MAX(max,size);
}
printf("%d\n",max+n-m-1+min(m-max,k));
}
return 0;
}