如果两个数
为了使得所有索引之间相互可达,小红至少需要手动再加多少条边。
每个测试文件均包含多组测试数。第一行输入一个整数,代表数据组数,每组测试数据描述如下:
对于每一组测试数据:
第一行一个整数,表示数组长度。
第二行个整数,第
个数为
,表示数组元素。
单个测试文件保证。
输出共行,每行一个整数,表示一个整数,表示至少需要手动再加多少条边才是使得图联通。
2 3 1 2 3 2 1 1
0 1
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using ll = long long;
using pii = pair<int, int>;
using pll = pair<long long, long long>;
void solve() {
int n;
cin >> n;
vector<ll> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a.begin() + 1, a.end());
int cnt = 0;
for (int i = 1; i <= n;) {
int j;
for (j = i; j + 1 <= n && (a[j] == a[j + 1] || a[j + 1] == a[j] + 1); j++)
;
if (a[i] == a[j]) {
cnt += j - i + 1;
} else {
cnt += 1;
}
i = j + 1;
}
cout << cnt - 1 << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}