degree

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6380

n个定点,m条边,保证在图中没有环的存在,所以在整个图中定点的最大度数为n-1,k为至多被去掉的边,题目要求可以去掉边和添加边,规则如下:

1. 移除至多 K 条边。
2. 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。

在给定k的情况下,有两种情况:

1)当k+in[i] >= m时,直接输出n-1即可

2)当k+in[i] < m时,输出的度数需要剪去构成环的情况

in数组存的是各个顶点的度数。

代码如下:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 typedef long long ll;
 5 const int maxn = 200005;
 6 int in[maxn];
 7 int n,m,k;
 8 
 9 int main()
10 {
11     int t;scanf("%d",&t);
12     while(t--)
13     {
14         memset(in,0,sizeof(in));
15         int d = -1;
16         scanf("%d%d%d",&n,&m,&k);
17         for(int i=1;i<=m;i++)
18         {
19             int a,b;
20             scanf("%d%d",&a,&b);  //输入数据
21             in[a]++;in[b]++;  //保存各个点的度数
22         }
23         int ans = -1;
24         for(int i=0;i<n;i++)
25         {
26             ans = max(ans,in[i]+n-m-1+min(k,m-in[i]));   //寻找出来度数最大的顶点
27         }
28         cout<<ans<<endl;
29     }
30 }

 

posted @ 2018-09-04 15:26  琥琥笙威  阅读(217)  评论(0编辑  收藏  举报