Background
在广袤的平原上,一股股清风悠然而过,轻轻抚摸着平原上的万物。远处的山峦,像是一条条静静躺卧在平原上的巨龙,慢慢地隐去了身影。而在平原的中央,一片片绿色的农田,在风中起伏着,好像是一片片绿色的海洋,翻滚着无尽的生命力。
这些清风,它们并非只是一阵阵轻柔的触感,而且它们还有着其他的作用。它们是平原的守护神,它们可以带来清新的空气,净化平原的环境,保持平原的生态平衡;它们还是平原中的好友,能够带来适宜的气候条件,帮助农作物生长,提高平原的产量。
在这片平原上,风是生命之源,平原是风的承载之地。它们在这里相互依存、相互扶持,共同构成了这片美丽的自然景观。
风与平原,是一种和谐、美丽而又充满生机的存在。它们的相互依存、相互促进,是自然界中最美好的体现之一,也给人们带来了无限的感动和启示。在这里,我们可以看到自然界的伟大,也可以看到人类与自然的和谐共处。
Description
现在有一个树形容器,这个树形容器由  个玻璃皿和 
 条玻璃管组成。你可以让玻璃皿中的多细胞生物通过玻璃管进行移动。 你可以进行以下的三种操作:
1. 在任意的只跟一条玻璃管相连接的玻璃皿中培养多细胞生物。
2.移动任意一只多细胞生物(能且仅能通过一根玻璃管,每根玻璃管只能被用一次),这种操作会让被移动的多细胞生物变成单细胞生物(别问我为什么,因为我想不到用什么代替了)。
3.将两只在同一个玻璃皿中的单细胞生物合体为一只多细胞生物。
4.单细胞生物不能通过玻璃管。
由于玻璃皿大小限制,一个玻璃皿中最多存在一只多细胞生物或者两只单细胞生物。
现求,要在 1 号玻璃皿中得到一个多细胞生物,你最少需要在几个皿中培养多细胞生物。
Format
Input
第一行,一个整数 ,表示玻璃皿的数量。
接下来  行,每行两个整数 
 表示编号为 
 和 
 的两个玻璃皿之间有一条玻璃管连接。
Output
一个整数,表示最少培养几个多细胞生物,可以让它们在 1 号玻璃皿中合体为一个多细胞生物。
如果无法合体出一个合格的多细胞生物,输出 −1。
Samples
输入数据 1
5
1 2
1 3
2 4
2 5
输出数据 1
3
Limitation
样例解释:在节点 培养多细胞生物。
对于 30% 的数据,。
对于 100% 的数据,。
思路:
建立一棵双向边的树,从1号节点进行dfs,如果只有一条边与之相连则返回true并把的值设为1。
否则遍历它的子节点,如果等于true,
加1。判断时如果
 返回true并把
的值设为最小值加上次小值。
AC code:
#include <iostream>
#include <vector>
using namespace std;
vector<int>road[1000005];
int ans[1000005];//答案
bool dfs(int u,int fa)//u当前节点,fa父亲节点
{
	if(road[u].size() == 1)//只有1条边
	{
	//	cout << u << endl;
		ans[u] = 1;
		return true;
	}
	int cnt = 0;
	int minn = 1e7,minnn = 1e7;//最小值和次小值
	for(int i = 0;i < road[u].size();i++)
	{
		int v = road[u][i];
		if(v == fa)
		{
			continue;
		}
		if(dfs(v,u))
		{
			cnt++;
			if(ans[v] < minn)
			{
				minnn = minn;
				minn = ans[v];
                //最小值
			}
			else if(ans[v] < minnn)
			{
				minnn = ans[v];
                //次小值
			}
		}
	}
	if(cnt >= 2)//只有两个才行
	{
		ans[u] = minn + minnn;
		return true;
	}
	return false;
 } 
int main()
{
	int n;
	cin >> n;
	for(int i = 1;i < n;i++)
	{
		int u,v;
		cin >> u >> v;
		road[u].push_back(v);
		road[v].push_back(u);
        //建树
	}
	if(dfs(1,0))
	{
		cout << ans[1] << endl;
	}
	else
	{
		cout << -1 << endl;
	}
	return 0;
 } 
 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号