【BZOJ】1975 [Sdoi2010]魔法猪学院(A*)
题目
传送门: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*)的更多相关文章
- Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1357 Solved: 446[Submit][Statu ...
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- bzoj 1975 [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1758 Solved: 557[Submit][Statu ...
- 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- bzoj 1975 [Sdoi2010]魔法猪学院(k短路)
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...
- BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa
https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...
- BZOJ 1975 SDOI2010 魔法猪学院 A*k短路
题目大意:给定一个值E 求起点到终点的最多条路径 使长度之和不超过E k短路的A*算法--每一个点有一个估价函数=g[x]+h[x] 当中g[x]是从源点出发已经走了的长度 h[x]是从这个点到汇点的 ...
- 【BZOJ】1975: [Sdoi2010]魔法猪学院
题意 \(n(2 \le n \le 5000)\)个点,找尽量多的不同\(1\)到\(n\)的路径,每一次的花费就是路径的全值和,要求在费用不超过\(E\)的情况下路径最多. 分析 裸的最段路. 题 ...
随机推荐
- antd中fomr中resetFields清空输入框
1.如果没有initValue的情况下,直接使用resetFields可以清空文本框的值 2.如果是有initValue的情况下,直接使用resetFields方法会直接重置为initValue的值 ...
- iOS8 对开发者来说意味着什么?
今天凌晨,Apple WWDC2014 iOS8 正式推出! 也许,对于广大iOS用户来说,iOS8的创新并不是特别多. 但对于开发者来说,影响却将会是无比巨大的! 正如Apple官网上的广告:Hug ...
- 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 ...
- jquery deferred promise
<script type="text/javascript">/* Deferredstate (then,done, fail, always,pipe, progr ...
- c++ 中 char 与 string 之间的相互转换问题
第一部分: 将 char * 或者 char [] 转换为 string 可以直接赋值,转换. 第二部分: 将 string 转换为 char * 或者 cha ...
- test20180921 手机信号
题意 分析 我们用形如(l, r, v) 的三元组描述一个区间,这个区间中从l 到r 每隔v 有一个信号站. 考虑一次construct 操作,会添加一个新的区间,并可能将一个已经存在的区间分裂为两个 ...
- 类名.fromObject(obj)静态方法
- 极快瑞的函数式编程,Jquery涉及的一些函数
$(function(){ 一些实现功能的代码:})————————————文档载入完成后执行的函数.$(function(){}) 是 $(document).ready(function(){}) ...
- python 网络编程要点
From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...
- windows dos窗口下如何复制和粘贴
这个帖子纯属为自己之前一些笨笨的操作做一次终结.使用计算机也有六年多了,很多计算机的基本操作也都掌握了,但毕竟是泥腿子出身,很多windows下的快捷操作和优化部分依然是不懂,就知道以窗口为基准,使用 ...