最小花费
这是一道最短路的裸题,但从寒假开始做,暑假才通过,可以看出有两点不足
1.态度不端正,有题没有过应该非常着急的去把它完成,如果是抱着学知识的态度,就不会去着急得刷太多的题目,而是静下心来,一道一道做。
2.不细心,即使到了暑假,也是调了很久。把pair<double,int>写成pair<int,double>,建成小根堆,一是对板子不熟悉,二是一个一直有的毛病,写代码不动脑子,凭感觉。脑子是个好东西~
但也有收获,比如又熟悉了一遍Dijkstra的板子,还有要建立一个超级源点或者都加入队列(本题用不上)
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 int n,m,A,B,num; 6 struct Edge{ 7 int next,to; 8 double dis; 9 }edge[200007]; 10 int head[2007]; 11 double d[2007]; 12 bool vis[2007]; 13 typedef pair<double,int>pii; 14 priority_queue<pii,vector<pii> >Q; 15 void add(int from,int to,double d){ 16 edge[++num].next=head[from]; 17 edge[num].to=to; 18 edge[num].dis=d; 19 head[from]=num; 20 } 21 int main(){ 22 cin>>n>>m; 23 for(int i=1;i<=m;i++){ 24 int u,v;double w;cin>>u>>v>>w; 25 w = (100-w)*0.01; 26 add(u,v,w); 27 add(v,u,w); 28 } 29 cin>>A>>B; 30 for(int i=1;i<=n;i++){ 31 d[i]=0; 32 } 33 d[A]=1; 34 for(int i=1;i<=n;i++) 35 if(i!=A) Q.push(make_pair(0,i)); 36 Q.push(make_pair(1,A)); 37 while(!Q.empty()){ 38 int u=Q.top().second;Q.pop(); 39 if(vis[u]) continue; 40 vis[u]=true; 41 for(int i=head[u];i;i=edge[i].next){ 42 int v=edge[i].to; 43 if(vis[v]) continue; 44 if(d[v]<d[u]*edge[i].dis) { 45 d[v]=d[u]*edge[i].dis; 46 Q.push(make_pair(d[v],v)); 47 } 48 } 49 } 50 printf("%.8lf",100/d[B]); 51 return 0; 52 } 53 54 //A最小->100/w,w要尽可能大->最长路
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)