A
题目
题解:贪心, 暴力可过,建立一棵树,选择其中任意两点删除,然后算出有几颗树
计算有几颗树的方法:见代码
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{
int fa;
vector<int> son;
}p[10000];
struct number
{
int num;
int cnt;
}q[10000];
bool cmp(number a,number b)
{
return a.cnt>b.cnt;
}
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++) p[i].fa=i;
for(int i=1;i<n;i++)
{
int s,f;
cin>>f>>s;
p[s].fa=f;
p[f].son.push_back(s);
}
//for(int i=1;i<=n;i++) cout<<p[i].son.size()<<endl;
int cnt=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int k=p[i].son.size()+p[j].son.size();///计算两个节点总共子节点的数量
if(p[i].fa==j||p[j].fa==i) k--;///若他们相连,即其中一个的父亲是另一个,则树的数目比节点数少一
if(i!=1&&j!=1)k++;///再判断,是否其中一个是1节点,都不是则树的数目加一
///(例子如下,删去2,3则树的数目(为5)比总共子节点数(4)多1
cnt=max(cnt,k);///找出最大的树的数目
}
}
cout <<cnt<< endl;
return 0;
}
/* 1
2 3
4 5 6 7
8 9 10*/
/* 1
4 5 6 7
8 9 10*/