关于 D
  • 板块学术版
  • 楼主BugGod
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/12/16 22:22
  • 上次更新2023/12/17 09:39:44
查看原帖
关于 D
541254
BugGod楼主2023/12/16 22:22

正解是 DFS 吗?如果是:

#include<bits/stdc++.h>
using namespace std;
#define int long long
void IOS()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
}
int n,u,v,vis[300010];
vector<int>G[300010];
int dfs(int x,int step)
{
	if(vis[x])return 9e18;
	vis[x]=1;
	int minn=9e18,ans=0;
	int flag=1;
	for(int i=0;i<G[x].size();i++)
	{
		if(!vis[G[x][i]])
		{
			flag=0;
			break;
		}
	}
	if(flag)return step+1;
	for(int i=0;i<G[x].size();i++)
	{
		int y=G[x][i],k=dfs(y,step+1);
		//minn=min(minn,k);
		if(x!=1)ans+=k;
		else minn=min(minn,k);
		//printf("node:%lld,step:%lld\n",y,k);
	}
	if(x==1)return minn;
	return ans;
}
signed main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	cout<<dfs(1,0);
	return 0;
}
2023/12/16 22:22
加载中...