2024杭电多校

传奇勇士小凯
 

Problem Description
传说在遥远的魔法大陆有着一个村庄叫做卡卡奇里奇,这里有n座房屋,n−1条道路,保证了任意两座房屋之间都可以通过道路相互可达。这里环境优美,居民幸福地生活着。

但是有一天晚上,原本平静的村庄突然受到一不明寄生生命体的袭击,奇怪的怪物绑架了所有居民,并控制了所有房屋。凌晨时分,在外游历的勇士小凯收到了卡卡奇里奇国王的召唤来到了卡卡奇里奇,奉命消灭所有怪物,解救整个村庄。

由于有人工智能Fairy的存在,卡卡奇里奇国王能够知道小凯和每个房屋的怪物的较量中的获胜概率是多少。在一场小凯和第i个房屋的怪物较量中,小凯有pi15的概率获得胜利,成功消灭第i个房屋的所有怪物,同时小凯有1−pi15的概率失败,那么第i个房屋的怪物会依旧存在,只能之后再挑战。由于没有被消灭怪物会在每个晚上恢复元气,所以每一天小凯对第i个房屋的怪物的战斗胜率是固定的。

经过了长途跋涉之后,小凯来到了卡卡奇里奇的**1号房屋**开始了战斗。每一天白天,小凯都会对当前他所在的房屋的怪物发起挑战,如果成功那么他会询问卡卡奇里奇国王然后在国王的建议之下选择一个**与当前房屋相邻的(有直接的道路相连的)**、**还存在怪物**的房屋前进(但是第二天才能对该房屋的怪物进行挑战),如果不存在这样的房屋,那么喜欢摸鱼的小凯便会**离开这个村庄**去摸鱼。如果挑战失败,那么小凯会在这个房屋门口休息一个晚上,等到下一天继续发起挑战。

国王希望摸鱼的小凯在村庄呆的久一点,所以他想问你在他的控制之下,小凯最多期望在村庄里停留多少天?请你以最简分数的形式告诉他这个答案。
 

Input
第一行一个整数T (1≤T≤20)​,表示数据组数。

对于每组数据,第一行有一个整数n (1≤n≤105),表示房屋的数量。

接下来有n−1行,每行两个整数u,v,表示村庄的一条道路,保证**没有重边,没有自环**。(1≤u,v≤n,u≠v)​

接下来有n个整数,第i个整数pi (1≤pi≤15)表示小凯打倒第i个村庄的怪物的概率为pi15。

数据保证∑n≤5⋅105
 

Output

对于每组数据,输出一个最简分数(A/B,A与B互质)表示小凯最多期望在村庄里停留多少天。数据保证答案不会为0。

dfs从1开始搜完,路上加上上个点的期望,最后求最大值;

每个点期望其实就是倒数再成1-15的所有数 这样分母相同可以直接相加

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=100050;
int res=1;
vector<int> v[N];
int num[N];
int ans[N];
void dfs(int x,int t){
	for(auto i:v[x]){
		if(i==t)continue;
		ans[i]=ans[x]+res/num[i];
		dfs(i,x);
	}
}
signed main(){
	for(int i=1;i<=15;i++)res*=i;
	int T;
	cin>>T;
	while(T--){
		res*=15;
		memset(num,0,sizeof num);
		memset(ans,0,sizeof ans);
		int n;
		cin>>n;
		for(int i=0;i<n-1;i++){
			int a,b;
			cin>>a>>b;
			v[a].push_back(b);
			v[b].push_back(a);
		}
		for(int i=1;i<=n;i++){
			cin>>num[i];
		}
		ans[1]=res/num[1];
		dfs(1,-1);
		int sum=0;
		for(int i=1;i<=n;i++)sum=max(sum,ans[i]);
		res/=15;
		int g=__gcd(sum,res);
		cout<<sum/g<<"/"<<res/g<<endl;
		for(int i=1;i<=n;i++)	v[i].clear();
	}
	return 0;
} 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值