题目

传送门:QWQ

分析

k短路,Astar。估价函数是终点向外跑的最短路。

显然不是正解qwq。

代码

// By noble_
// Astar algorithm // #include <bits/stdc++.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
using namespace std; const int maxn = ;
double h[maxn];
int n,m,s,t; struct Edge{ int u,v; double dis; };
struct Node{
int x;double dis,g;
bool operator < (const Node& a) const{ return dis>a.dis; }
// Node(int xx,double d){x=xx;dis=d;}
};
priority_queue<Node> que;
struct QwQ{
vector<Edge> edges;
vector<int> G[maxn];
int vis[maxn];
//传边反着穿
void Addedge(int u,int v,double dis) {
edges.push_back((Edge){u,v,dis});
G[u].push_back(edges.size()-);
}
void dijkstra() {
while(!que.empty()) que.pop();
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++) h[i]=1e8;
que.push((Node){t,,}); h[t]=;
while(!que.empty()) {
Node x=que.top(); que.pop();
if(vis[x.x]) continue;
// printf("======== %d %f\n",x.x,x.dis);
vis[x.x]=;
for(int i=;i<G[x.x].size();i++) {
Edge& e=edges[G[x.x][i]];
// printf("=--==-=-=- %d %f\n",e.v,h[e.v]);
if(h[e.v] >= h[x.x] + e.dis) {
// printf("===== %d -> %d\n",x.x,e.v);
h[e.v] = h[x.x] + e.dis;
que.push((Node){e.v,h[e.v],});
}
}
}
// printf("--- %d %d\n",(int)h[1],(int)h[2]);
}
}qwq; vector<Edge> edges;
vector<int> G[maxn];
int reach[maxn], k, ans=;
double p, sum=;
void Addedge(int u,int v,double dis) {
edges.push_back((Edge){u,v,dis});
G[u].push_back(edges.size()-);
}
void Astar() {
while(!que.empty()) que.pop();
// if(h[s] >= 1e8) return -1;
memset(reach,,sizeof(reach));
// priority_queue<Node> que;
que.push((Node){s,h[s],});
while(!que.empty()) {
Node x=que.top(); que.pop();
// printf("---- %d %f\n",x.x,x.dis);
reach[x.x]++;
if(reach[x.x]>k)continue;
if(x.x==t) {
if(sum+x.g <= p) sum+=x.g,ans++;
else break;
}
for(int i=;i<G[x.x].size();i++) {
Edge e=edges[G[x.x][i]];
// printf("======= %d %f %f\n",e.v,h[e.v]+x.dis+e.dis,h[e.u]);
que.push((Node){e.v,h[e.v] + x.g + e.dis, x.g+e.dis});
}
}
// return -1;
} int main() {
scanf("%d%d%lf",&n,&m,&p); for(int i=;i<m;i++) {
int a,b;double c;
scanf("%d%d%lf",&a,&b,&c);
qwq.Addedge(b,a,c);
Addedge(a,b,c);
}
// scanf("%d%d%d",&s,&t,&k);
// if(s==t) k++;
s=; t=n;
qwq.dijkstra(); k=int(p/h[]);
Astar();
printf("%d\n",ans);
}
/*
4 6 15
1 2 1.5
2 1 1.5
1 3 3
2 3 1.5
3 4 1.5
1 4 1.5 */

【BZOJ】1975 [Sdoi2010]魔法猪学院(A*)的更多相关文章

  1. Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1357  Solved: 446[Submit][Statu ...

  2. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

  3. bzoj 1975 [Sdoi2010]魔法猪学院

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1758  Solved: 557[Submit][Statu ...

  4. 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  5. bzoj 1975 [Sdoi2010]魔法猪学院(k短路)

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  6. BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...

  7. BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa

    https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...

  8. BZOJ 1975 SDOI2010 魔法猪学院 A*k短路

    题目大意:给定一个值E 求起点到终点的最多条路径 使长度之和不超过E k短路的A*算法--每一个点有一个估价函数=g[x]+h[x] 当中g[x]是从源点出发已经走了的长度 h[x]是从这个点到汇点的 ...

  9. 【BZOJ】1975: [Sdoi2010]魔法猪学院

    题意 \(n(2 \le n \le 5000)\)个点,找尽量多的不同\(1\)到\(n\)的路径,每一次的花费就是路径的全值和,要求在费用不超过\(E\)的情况下路径最多. 分析 裸的最段路. 题 ...

随机推荐

  1. antd中fomr中resetFields清空输入框

    1.如果没有initValue的情况下,直接使用resetFields可以清空文本框的值 2.如果是有initValue的情况下,直接使用resetFields方法会直接重置为initValue的值 ...

  2. iOS8 对开发者来说意味着什么?

    今天凌晨,Apple WWDC2014 iOS8 正式推出! 也许,对于广大iOS用户来说,iOS8的创新并不是特别多. 但对于开发者来说,影响却将会是无比巨大的! 正如Apple官网上的广告:Hug ...

  3. 1.1.1 A+B for Input-Output Practice (I)

    A+B for Input-Output Practice (I) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  4. jquery deferred promise

    <script type="text/javascript">/* Deferredstate (then,done, fail, always,pipe, progr ...

  5. c++ 中 char 与 string 之间的相互转换问题

    第一部分: 将  char *    或者    char []   转换为  string 可以直接赋值,转换. 第二部分: 将   string   转换为 char *    或者    cha ...

  6. test20180921 手机信号

    题意 分析 我们用形如(l, r, v) 的三元组描述一个区间,这个区间中从l 到r 每隔v 有一个信号站. 考虑一次construct 操作,会添加一个新的区间,并可能将一个已经存在的区间分裂为两个 ...

  7. 类名.fromObject(obj)静态方法

  8. 极快瑞的函数式编程,Jquery涉及的一些函数

    $(function(){ 一些实现功能的代码:})————————————文档载入完成后执行的函数.$(function(){}) 是 $(document).ready(function(){}) ...

  9. python 网络编程要点

    From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...

  10. windows dos窗口下如何复制和粘贴

    这个帖子纯属为自己之前一些笨笨的操作做一次终结.使用计算机也有六年多了,很多计算机的基本操作也都掌握了,但毕竟是泥腿子出身,很多windows下的快捷操作和优化部分依然是不懂,就知道以窗口为基准,使用 ...