比赛 2025.1.4 评测结果 WWWWWWWWWW
题目名称 喵星人集会 最终得分 0
用户昵称 wdsjl 运行时间 0.031 s
代码语言 C++ 内存使用 3.60 MiB
提交时间 2025-01-04 16:11:21
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 60;

char s[N]; 

int n;

int ps[N];

int mp[N][N],dis[N],res,vis[N];

void dfs(int u){
	for(int i=1;i<=n;i++){
		if(mp[u][i]==1&&vis[i]==0){
			vis[i]=1;
			dis[i]=dis[u]+1;
			dfs(i);
			vis[i]=0;
		}
	}
}

int main(){
	freopen("party.in","r",stdin);
	freopen("party.out","w",stdout); 
	res=0x7f7f7f7f;
	memset(mp,0x3f,sizeof(mp));
	scanf("%d",&n);
	cin>>(s+1);
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		mp[x][y]=mp[y][x]=1;
	}
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(s[i]=='1')ps[++cnt]=i;
	}
	for(int i=1;i<=3;i++){
		memset(vis,0,sizeof(vis));
		memset(dis,0x3f,sizeof(dis));
		dis[ps[i]]=0;
		vis[ps[i]]=1;
		dfs(ps[i]);
		int vv=0;
		for(int j=1;j<=3;j++){
			if(i==j)continue;
			vv+=dis[ps[j]];
		}
//		cout<<ps[i]<<" "<<vv<<endl;
		vv-=2;
		res=min(res,vv);
	}
	printf("%d",res);
	return 0;
}