Problem Description
度度熊最近似乎在研究图论。给定一个有 K 条边。
2. 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。
请问最后此图中度数 (degree) 最大的点的度数可以多大呢?
2. 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。
请问最后此图中度数 (degree) 最大的点的度数可以多大呢?
Input
输入的第一行有一个正整数 1000
Output
对于每一笔测试资料,请依序各自在一行内输出一个整数,代表按照规定操作后可能出现的最大度数。
Sample Input
2
3 1 1
1 2
8 6 0
1 2
3 1
5 6
4 1
6 4
7 0
Sample Output
2 4
题解
假如不用删边,那么ans = maxdegree + 树的个数 - 1,假如能删k条边,那么ans += k,但是ans最多只能到n - 1,所以答案就是min(n - 1, maxdegree + 树的个数 - 1 + k)。这里树的个数 = 点数 - 边数。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 200005; int in[N]; int main() { int n, t, m, k; cin>>t; while(t--) { memset(in, 0, sizeof in); scanf("%d%d%d", &n, &m, &k); for(int i = 1; i <= m; i++) { int a, b; scanf("%d%d", &a, &b); in[a] ++; in[b] ++; } int tree_c = n - m; int j = 0; for(int i = 1; i < n; i++) { if(in[j] < in[i]) j = i; } int ans = min(n - 1, in[j] + tree_c - 1 + k); printf("%d\n", ans); } return 0; }