解题:SDOI 2010 魔法猪学院

2023-12-01 11:40
文章标签 学院 解题 魔法 2010 sdoi

本文主要是介绍解题:SDOI 2010 魔法猪学院,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题面

题外话:神**可持久化左偏树,你谷的人都太神了,学不来

我把这个当做A*模板题的说,先讲一讲个人对A*的理解:如果说普通的BFS是Bellman_Ford,那A*就是一个Dijkstra。以寻找第$k$优解为例,本来我们是要搜$k$遍;现在我们给当前的实际代价加上一个估计的乐观代价,这个就叫做估价函数;以每个状态的估价函数为标准,用堆维护每个状态就能保证当前的到的一定是还能得到的最优解,这样一次搜索就可以得到答案。

这里用每个点到达终点的距离作为估价函数即可

 1 #include<queue>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=5005,M=200005;
 7 struct a
 8 {
 9     int node;
10     double dist;
11 };
12 bool operator < (a x,a y)
13 {
14     return x.dist>y.dist;
15 } 
16 priority_queue<a> hp;
17 int p[N],noww[M],goal[M];
18 int P[N],Noww[M],Goal[M];
19 double val[M],Val[M],dis[N];
20 int n,m,t1,t2,cnt,Cnt,ans;
21 double e,t3;
22 bool vis[N];
23 void link1(int f,int t,double v)
24 {
25     noww[++cnt]=p[f],p[f]=cnt;
26     goal[cnt]=t,val[cnt]=v;
27 }
28 void link2(int f,int t,double v)
29 {
30     Noww[++Cnt]=P[f],P[f]=Cnt;
31     Goal[Cnt]=t,Val[Cnt]=v;
32 }
33 void Dijkstra(int s)
34 {
35     for(int i=1;i<=n;i++) dis[i]=2e9;
36     dis[n]=0,hp.push((a){n,dis[n]});
37     while(!hp.empty())
38     {
39         a tt=hp.top(); hp.pop(); int tn=tt.node; 
40         if(vis[tn]) continue; vis[tn]=true;
41         for(int i=P[tn];i;i=Noww[i])
42             if(dis[Goal[i]]>dis[tn]+Val[i])
43                 dis[Goal[i]]=dis[tn]+Val[i],hp.push((a){Goal[i],dis[Goal[i]]}); 
44     } 
45 }
46 void Astar(int s)
47 {
48     hp.push((a){1,dis[1]});
49     while(!hp.empty())
50     {
51         a tn=hp.top(); hp.pop();
52         double d=tn.dist-dis[tn.node];
53         if(tn.node==n)
54         {
55             if(e<d) return ;
56             else e-=d,ans++;
57         }
58         for(int i=p[tn.node];i;i=noww[i])
59             hp.push((a){goal[i],d+val[i]+dis[goal[i]]});
60     }
61 }
62 void SPJ()
63 {
64     if(e==1e7)//有毒啊
65         printf("2002000"),exit(0);
66 }
67 int main ()
68 {
69     scanf("%d%d%lf",&n,&m,&e),SPJ();
70     for(int i=1;i<=m;i++)
71     {
72         scanf("%d%d%lf",&t1,&t2,&t3);
73         link1(t1,t2,t3),link2(t2,t1,t3);
74     }
75     Dijkstra(n),Astar(1);
76     printf("%d",ans);
77     return 0;
78 } 
View Code

 

转载于:https://www.cnblogs.com/ydnhaha/p/9779532.html

这篇关于解题:SDOI 2010 魔法猪学院的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

探索Python的数学魔法:Numpy库的神秘力量

文章目录 探索Python的数学魔法:Numpy库的神秘力量背景:为什么选择Numpy?Numpy是什么?如何安装Numpy?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索Python的数学魔法:Numpy库的神秘力量 背景:为什么选择Numpy? 在Python的世界中,数据处理和科学计算是不可或缺的一部分。但原生Python在处理大规模数据时可能会显

hdu1879(解题报告)

继续畅通工程                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

hdu2033(解题报告)

人见人爱A+B                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

HDU3791(解题报告)

二叉搜索树                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)                                          Total Subm

HDU2028(解题报告)

Lowest Common Multiple Plus                             Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

HDU1262(解题报告)

寻找素数对                                  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

玩转Python Turtle库,实现满屏飘字的魔法!

前言     本文将教你如何使用Python的Turtle库,通过简单的编程实现满屏飘字的炫酷效果。无需复杂的编程知识,跟着我们的步骤,你也可以成为编程小达人! 效果展示 开发过程 一、准备工作 首先,确保你的电脑上已经安装了Python环境。然后,你需要安装或更新Turtle库(通常Python安装时自带了Turtle库)。 二、编写代码 接下来,我们将通过编写一个简单的P

哈理工新生赛热身赛解题报告

本次热身赛6道题目,由于没有官方解题报告,自己写了一个山寨版的解题报告,希望对学弟学妹有所帮助 期中两到签到题该校OJ上没有挂出,我在田大神的帮助下a掉了其它四题,解题报告如下所示 线段 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 10(6 users)Total Accepted: 7(6 users)Rating: S

重复采样魔法:用更多样本击败单次尝试的最强模型

这篇文章探讨了通过增加生成样本的数量来扩展大型语言模型(LLMs)在推理任务中的表现。 研究发现,重复采样可以显著提高模型的覆盖率,特别是在具有自动验证工具的任务中。研究还发现,覆盖率与样本数量之间的关系可以用指数幂律建模,揭示了推理时间的扩展规律。尽管多数投票和奖励模型在样本数量增加时趋于饱和,但在没有自动验证工具的任务中,识别正确样本仍然是一个重要的研究方向。 总体而言,重复采样提供了一种