P2973 [USACO10HOL] Driving Out the Piggies G 臭气弹/驱逐猪猡

2023-10-20 09:40

本文主要是介绍P2973 [USACO10HOL] Driving Out the Piggies G 臭气弹/驱逐猪猡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接
题目:
奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡。猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城。这些城市由M (1 <= M <= 44,850)条由两个不同端点A_j和B_j (1 <= A_j<= N; 1 <= B_j <= N)表示的双向道路连接。保证城市1至少连接一个其它的城市。

一开始臭气弹会被放在城市1。每个小时(包括第一个小时),它有P/Q (1 <= P <=1,000,000; 1 <= Q <= 1,000,000)的概率污染它所在的城市。如果这个小时内它没有污染它所在的城市,那麽它随机地选择一条道路,在这个小时内沿着这条道路走到一个新的城市。可以离开这个城市的所有道路被选择的概率均等。

因为这个臭气弹的随机的性质,奶牛们很困惑哪个城市最有可能被污染。给定一个猪猡文明的地图和臭气弹在每个小时内爆炸的概率。计算每个城市最终被污染的概率。

如下例,假设这个猪猡文明有两个连接在一起的城市。臭气炸弹从城市1出发,每到一个城市,它都有1/2的概率爆炸

                         1--2 

可知下面这些路径是炸弹可能经过的路径(最后一个城市是臭气弹爆炸的城市):

1: 1
2: 1-2
3: 1-2-1
4: 1-2-1-2
5: 1-2-1-2-1
...

要得到炸弹在城市1终止的概率,我们可以把上面的第1,第3,第5……条路径的概率加起来,(也就是上表奇数编号的路径)。上表中第k条路径的概率正好是,也就是必须在前k-1个回合离开所在城市(每次的概率为1 - 1/2 = 1/2)并且留在最后一个城市(概率为1/2)。

所以在城市1结束的概率可以表示为1/2 + (1/2)^3 + (1/2)^5 + …。当我们无限地计算把这些项一个个加起来,我们最后会恰好得到2/3,也就是我们要求的概率,大约是0.666666667。这意味着最终停留在城市2的概率为1/3,大约为0.333333333。

你将会在你前50次提交的时候得到部份测试数据反馈。

题目名称: dotp

输入格式:
第1行: 四个由空格隔开的整数: N, M, P, 和 Q
第2到第M+1行: 第i+1行用两个由空格隔开的整数A_j和B_j表示一条道路。

输出格式:
第1到第N行: 在第i行,用一个浮点数输出城市i被摧毁的概率。误差不超过10^-6的答案会被接受(注意这就是说你需要至少输出6位有效数字使得答案有效)。

样例输入:

 2 1 1 21 2

样例输出:

0.666666667
0.333333333

私货:初音未来:没活了给大家唱首歌吧
题意概括:
给出一个n个点、m条边的无向图,在节点1有一枚炸弹。炸弹在每个节点都有 p q {p\over q} qp的概率爆炸,1- p q {p\over q} qp的概率转入其他节点,要求输出每个点的爆炸概率。


思路分析
一个无向图,联系高斯消元的矩阵,很容易想到邻接链表。
通过邻接链表我们就将一个图转换成了一个矩阵。
而对于每一个点,都有 p q {p\over q} qp的概率爆炸。
而除了炸弹所在初始点为点1外,所有的炸弹都是转入来的
我们设第i个点的转入概率是 x i x_i xi
image
对图的解释:以 x 1 x_1 x1为例子, x 1 x_1 x1是点1的转入概率,而它的系数a就是 x 1 x_1 x1转入 x 3 x_3 x3的概率,a=(1- p q {p\over q} qp)* 1 d 1 {1\over d_1} d11 d 1 d_1 d1是点1的入度)
而此方程可以将x3左移过去就有了矩阵:
a b -1 d e | 0
同理但特殊的,对于点1,最初炸弹就在这里,我们在等式左边加1,可以移动到等式右边去
得到矩阵:
-1 0 c 0 0 | -1
(因为节点1只和3相连所以 x 2 x_2 x2 x 4 x_4 x4 x 5 x_5 x5的系数都是0)
我们得到了矩阵,就可以运用高斯消元得到未知数 x i x_i xi的值
该值乘上 p q {p\over q} qp就得到了在该点爆炸的概率。
注意:
p/q应是double类型

Miku’s Code:

#include<bits/stdc++.h>
using namespace std;const int maxn=350;
const int eps=1e-8;int n,m,p,q;
double k;
int d[maxn];
double a[maxn][maxn];
bool cont[maxn][maxn];void input(){						//输入scanf("%d%d%d%d",&n,&m,&p,&q);int A,B;for(int i=1;i<=m;++i){scanf("%d%d",&A,&B);cont[A][B]=true;cont[B][A]=true;++d[A];++d[B];}
}void change(){						//转化出矩阵a[1][n+1]=-1;k=(double)p/q;for(int i=1;i<=n;++i){a[i][i]=-1;for(int j=1;j<=n;++j){if(cont[i][j]==true){a[i][j]=(1-k)/d[j];}}}
}void try_(){						//调试代码for(int i=1;i<=n;++i){for(int j=1;j<=n+1;++j){if(j==n+1)	cout<<"| ";cout<<a[i][j]<<' ';}cout<<endl;}
}void work(){						//高斯约旦消元板子for(int i=1;i<=n;++i){int y=i;while(fabs(a[y][i])<=fabs(eps)&&y<=n)	++y;for(int j=1;j<=n+1;++j){swap(a[i][j],a[y][j]);}double k=a[i][i];for(int j=1;j<=n+1;++j){a[i][j]/=k;}for(int j=1;j<=n;++j){if(i!=j){double ki=a[j][i];for(int q=1;q<=n+1;++q){a[j][q]-=ki*a[i][q];}}}}
}int main(){input();change();//try_();work();//try_();for(int i=1;i<=n;++i){printf("%.6lf\n",a[i][n+1]*k);}return 0;
}

注:本人不是Miku黑,整活部分如有冒犯请见谅。
QAQ

这篇关于P2973 [USACO10HOL] Driving Out the Piggies G 臭气弹/驱逐猪猡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/246261

相关文章

阅读笔记--Guiding Attention in End-to-End Driving Models

作者:Diego Porres1, Yi Xiao1, Gabriel Villalonga1, Alexandre Levy1, Antonio M. L ́ opez1,2 出版时间:arXiv:2405.00242v1 [cs.CV] 30 Apr 2024 这篇论文研究了如何引导基于视觉的端到端自动驾驶模型的注意力,以提高它们的驾驶质量和获得更直观的激活图。 摘 要   介绍

Segmentation简记-Multi-stream CNN based Video Semantic Segmentation for Automated Driving

创新点 1.RFCN & MSFCN 总结 网络结构如图所示。输入视频得到图像分割结果。 简单粗暴

Segmentation简记5-AuxNet: Auxiliary tasks enhanced Semantic Segmentation for Automated Driving

创新点 1.分割网络为主任务,深度估计网络为辅任务 2.loss的设计 总结如图所示 网络结构如图所示 其实很容易理解。 backbone是基于ResNet50 分割网络是基于FCN8 深度估计网络与分割网络类似,最后一层是回归深度层。 最有意思的是两种任务的loss的合并。 分割的loss很常见:cross entropy 深度loss:mean absolute error 算法一:

DS简记1-Real-time Joint Object Detection and Semantic Segmentation Network for Automated Driving

创新点 1.更小的网络,更多的类别,更复杂的实验 2. 一体化 总结 终于看到一篇检测跟踪一体化的文章 网络结构如下: ResNet10是共享的Encoder,yolov2 是检测的Deconder,FCN8 是分割的Deconder。 其实很简单,论文作者也指出:Our work is closest to the recent MultiNet. We differ by focus

【论文解读】Planning-oriented Autonomous Driving

UniAD 摘要引言方法Perception: Tracking and MappingPrediction: Motion ForecastingPrediction: Occupancy PredictionPlanningLearning 实验结论 摘要 现代自动驾驶系统的特征是按顺序的模块化任务,即感知、预测和规划。为了执行广泛多样的任务并实现高级智能,现代方法要么为单个

Altium Designer-Net has no driving source解决办法

Altium Designer-Net has no driving source解决办法 问题分析:图中有一个器件的管脚属性设定成了驱动源(power),但是却并没有连接电源 解决办法:在元件库中修改管脚属性为passive,然后再在原理图中更新,具体更新方法见如下链接https://blog.csdn.net/u011816009/article/details/102559057

k8s容器驱逐之ephemeral-storage

1.容器被驱逐,首先比较直观的是查看Event The node was low on resource: ephemeral-storage. Container zk was using 910316Ki, which exceeds its request of 0. 2.原因 cat /etc/docker/daemon.json{"exec-opts": ["native.

论文《Visual Point Cloud Forecasting enables Scalable Autonomous Driving》详细解析

论文《Visual Point Cloud Forecasting enables Scalable Autonomous Driving》详细解析 摘要 该论文提出了一种新的预训练任务,称为“视觉点云预测”(Visual Point Cloud Forecasting),从历史视觉输入中预测未来的点云。论文介绍了ViDAR模型,通过这种方法显著提高了多种下游任务(如感知、预测和规划)的性能。

特斯拉全自动驾驶系统Tesla‘s Full-Self Driving (FSD)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Overview Tesla’s FSD is a suite of features that includes Autopilot, Navigate on Autopilot, Auto Lane Change, Autopark, Summon, and Traffic

一次意想不到的pod内存驱逐问题

更多技术博客,请关注微信公众号:运维之美 处理项目上K8S集群pod驱逐问题也算不少了,不过此次产生pod驱逐的原因却是意想不到,最后复盘原因很简单,定位故障时候却是忽略了,不过也算丰富了处理故障的案例。 1、案发现场 客户现场反馈门户网站无法打开,有很多pod状态为Evicted kubectl get pods -A | grep 0/1web-nginx-865674789f-