【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\)的情况下路径最多. 分析 裸的最段路. 题 ...
随机推荐
- ztree树形菜单的增加删除修改和换图标
首先需要注意一点,如果有研究过树形菜单,就会发现实现删除和修改功能特别简单,但是增加却有一点复杂.造成这个现象是ztree树形菜单的历史遗留问题.大概是之前的版本没有增加这个功能,后来的版本加上了这个 ...
- matlab mod()&rem()
一.介绍rem/mod(X,Y)当X,Y符号相同的时候,这两者一样,当符号不相同的时候才有差别,具体表现在rem结果的符号与被除数相同:mod结果的符号与除数相同 二.例子 >> a=9; ...
- VS2015 LINK : fatal error LNK1264: 已指定 /GENPROFILE 但没有所需的代码生成;检测失败
C/C++ > 优化 > 全程优化 > 是
- 压力测试命令行工具SuperBenchmarker
压力测试命令行工具SuperBenchmarker SuperBenchmarker 是ㄧ个开源的类似于Apache ab的压力测试命令行工具.可以在 .NET 4.52+ 或者 .NET Core ...
- leetcode:Valid Palindrome【Python版】
1.注意空字符串的处理: 2.注意是alphanumeric字符: 3.字符串添加字符直接用+就可以: class Solution: # @param s, a string # @return a ...
- mysql 行号 获取指定行数据
mysql 行号的实现 Select id,(@rowNum:=@rowNum+1) as rowNo From first,(Select (@rowNum :=0) ) bOrder by fir ...
- zmediaboard-Hi3518参数及配置
1.12_13.uboot的烧写和flash分区1_21.12.1.裸机烧录uboot(1)什么叫裸机烧录?设备是空白的,未经烧录的,就叫裸机.(2)裸机烧录一个设备有2种方案:1是用外部烧录器来烧录 ...
- C语言面试题2
预处理 问题1:什么是预编译?何时需要预编译? 答:预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作.主要处理#开头的指令.如拷贝#include包含的文件代码.替换#def ...
- DBLinq (MySQL exactly) Linq To MySql
http://blog.csdn.net/feihu_guest/article/details/7346948 DBLinq (MySQL exactly) Linq To MySql http:/ ...
- URL中的hash(井号)
1.#的含义 #代表网页中的一个位置,其右边的字符,就是该位置的标识符.比如 http://www.example.com/index.html#print 就是代表index.html中的print ...