社区讨论

70pts求助

P1395会议参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lpf2qi13
此快照首次捕获于
2023/11/26 14:03
2 年前
此快照最后确认于
2023/11/26 15:57
2 年前
查看原帖
dfs超时,求更好的方法。

悬关!!!

CPP
#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;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...