题目

传送门: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. MySQL性能优化方法一:缓存参数优化

    原文链接:http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter 数据库属于 IO 密集型的应用程序,其主要职责就是数 ...

  2. 6.1 socket 长连接、短连接

    一般情况下,服务器的长连接和短连接不是服务器说了算,而是客户端说了算.因为服务器是给别人提供业务的,一旦连接建立起来之后,服务器端不会主动把连接给close掉. 客户端发送一笔业务,没有关闭连接,然后 ...

  3. C++ 写的地图控件,支持google 百度 在线离线地图

    C++处理google  百度地图在网上查阅了很多都是通过浏览器方式显示地图信息, 跟我目前项目很不符合, 所以仔细研究了一下C++方式显示地图.通过地图投影以及墨卡托投影,在通过平面地图计算经纬度. ...

  4. 获奖感言和C语言的学习心得

    获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...

  5. C高级第一次PTA作业

    作业要求一 附加题目 写程序证明P++等价于(p)++还是等价于*(p++)? 1.设计思路: (1).题目算法描述 第一步:定义变量p并赋初值 第二步:分三次计算每次分别输出 p++,(p)++,* ...

  6. Gym - 101550A Artwork (并查集在线做法)

    题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...

  7. CodeForces - 367E:Sereja and Intervals(组合数&&DP)

    Sereja is interested in intervals of numbers, so he has prepared a problem about intervals for you. ...

  8. CTF之常见的两种关于word的信息隐藏技术

    一.利用word本身自带的文字隐藏功能 1.在word中输入文字 2.选中文字,单击右键,选择字体选项 3.单击字体选项后,单击隐藏,确定 查找隐藏信息 1.单击左上角WPS文字后,选择选项按钮单击 ...

  9. POJ2182 Lost Cows

    题意 Language:Default Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13448 Accep ...

  10. test20180919 选择客栈

    题意 分析 不难发现把增加人数看成减少人数,上限是w 看成总数是w,问题就变成了询问有多少个子区间没有0. 考虑这个问题困难在哪里,就是区间加减法让我们不好判断0 的位置. 因为题目保证每个位置的值非 ...