死宅与陷阱

题解:

不难发现,在有向图中,从起点出发,越往后达到每个点的概率越低,就是说一个点的下一个点的概率一定不会大于上一个点。

那么用贪心的思想,每次选择概率最大的一点放陷阱,这样期望加的也是最多的。

先BFS处理出所有点的概率,然后将概率从大到小排序,先算出不放陷阱的期望,然后在加上T个陷阱放上去之后的期望,注意起点不能放陷阱。复杂度O(m + nlogn),另外这份代码在OJ上跑有精度问题只有95分,在Linux下测却没有这样的问题。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<cctype>
#include<climits>
#define MAXA 100500
using namespace std;
int Head[MAXA],cnt;
struct Rx_Graph {
	int next,to;
	long double w;
}Edge[MAXA];
void Add(int u,int v,long double w) {
	Edge[++cnt].next = Head[u];
	Edge[cnt].to = v;
	Edge[cnt].w = w;
	Head[u] = cnt;
}
bool Cmp(const long double &a,const long double &b) {
	return a > b;
}
int n,m,UpDamage,Start,T,Trapper[MAXA],u,v,k,Q[MAXA],h = 1,t = 1;
long double c,Ans,Point[MAXA];

int main() {
//	freopen("trap.in","r",stdin);
//	freopen("trap.out","w",stdout);
	scanf("%d %d %d %d %d",&n,&m,&UpDamage,&Start,&T);
	for(int i=1;i<=n;i++)
	    scanf("%d",&Trapper[i]);
	for(int i=1;i<=m;i++) {
		scanf("%d %d %Lf",&u,&v,&c);
		Add(u,v,c);
	}
	Q[t++] = Start;
	Point[Start] = 1.0000;
	while(h != t) {
		k = Q[h];
		h++;
		for(int i=Head[k];i;i=Edge[i].next) {
			int j = Edge[i].to;
			Point[j] += Point[k] * Edge[i].w;
			Edge[i].w = Point[j];
			Q[t++] = j;
		}
	}
	for(int i=1;i<=n;i++)
	    Ans += (long double)Trapper[i] * Point[i];
	sort(Point + 1,Point + n + 1,Cmp);
	for(int i=2;i<=T+1;i++)
	    Ans += (long double)UpDamage * Point[i];
	printf("%.3Lf",Ans);
}
/*
4 3 30 1 1
10 50 20 10
1 2 0.80
1 3 0.10
2 4 0.60

8 7 15 1 1
21 35 15 65 98 12 33 15
1 2 0.20
1 3 0.56
3 8 0.73
3 7 0.11
3 4 0.13
2 6 0.10
2 5 0.80
*/

 

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值