70pts求助
  • 板块P1395 会议
  • 楼主xishengming
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/11/26 14:02
  • 上次更新2023/11/26 15:57:39
查看原帖
70pts求助
996280
xishengming楼主2023/11/26 14:02

dfs超时,求更好的方法。

悬关!!!

#include<bits/stdc++.h>
using namespace std;
struct graph{
	vector<int>nxt;
}a[100005];
int n,vis[100005],s[100005],minn,ans=INT_MAX,adress,tmp[100005];
void dfs(int now,int cnt)
{
	tmp[now]=cnt<tmp[now]?cnt:tmp[now];
	for(int i=0;i<a[now].nxt.size();i++)
	{
		if(!vis[a[now].nxt[i]])
		{
			vis[a[now].nxt[i]]=1;
			dfs(a[now].nxt[i],cnt+1);
			vis[a[now].nxt[i]]=0;
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		a[x].nxt.push_back(y);
		a[y].nxt.push_back(x);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		tmp[j]=INT_MAX;
		dfs(i,0);
		for(int j=1;j<=n;j++)
		s[i]+=tmp[j];
	}
	for(int i=1;i<=n;i++)
	{
		if(s[i]<ans)
		{
			ans=s[i];
			adress=i;
		}
	}
	cout<<adress<<" "<<ans;
	return 0;
}
2023/11/26 14:02
加载中...