BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1975
题意&简要做法
一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\leq E\)。
可以转化为求K短路。注意这里不需要二分,只要不断取得剩下的路径里的最短路,累加权值直到超过E即可。
细节
原题&洛谷上有256M空间,BZOJ上只有64M,坑啊...
加入一些剪枝,在当前路径长度>E时直接不加入。
将double的值乘上一个很大的数,转换成long long,跑得快了一点,据说可以避免一些精度误差。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=5005, MAXM=400005;
const ll INF=0x3f3f3f3f3f3f3f3f;
int N, M, ne, in[MAXN];
ll V, d[MAXN];
struct Edge{Edge *nxt; int to; ll w;}E[MAXM],*hd[MAXN],*hr[MAXN];
void adde(int u, int v, ll w){
E[ne].to=v;E[ne].w=w;E[ne].nxt=hd[u];hd[u]=&E[ne++];
E[ne].to=u;E[ne].w=w;E[ne].nxt=hr[v];hr[v]=&E[ne++];
}
struct St{
int u; ll g;
St(){}
St(int u, ll g):u(u),g(g){}
bool operator<(const St &o)const{return g+d[u]>o.g+d[o.u];}
};
void spfa(){
memset(d,0x3f,sizeof(d)); d[N]=0;
queue<int> q; q.push(N);
while(!q.empty()){
int u=q.front(); q.pop(); in[u]=0;
for(Edge *e=hr[u]; e; e=e->nxt){
int v=e->to;
if(d[v]>d[u]+e->w){
d[v]=d[u]+e->w;
if(!in[v]) in[v]=1,q.push(v);
}
}
}
}
void As(){
priority_queue<St> pq; pq.push(St(1,0));
int k=0;
while(!pq.empty()){
St s=pq.top(); pq.pop();
if(s.u==N){
ll f=s.g+d[s.u];
if(V>=f) V-=f, k++;
else break;
}else{
for(Edge *e=hd[s.u]; e; e=e->nxt){
ll g=s.g+e->w;
if(g+d[e->to]<=V) pq.push(St(e->to,g));
}
}
}
printf("%d\n", k);
}
int main(){
double t;
scanf("%d%d%lf", &N, &M, &t); V=(ll)(t*1e10+0.5);
for(int i=0,u,v; i<M; ++i){
double w; scanf("%d%d%lf", &u, &v, &w);
adde(u,v,(ll)(w*1e10+0.5));
}
spfa(); As();
return 0;
}
BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*的更多相关文章
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1357 Solved: 446[Submit][Statu ...
- bzoj 1975 [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1758 Solved: 557[Submit][Statu ...
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- bzoj 1975 [Sdoi2010]魔法猪学院(k短路)
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- 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]是从这个点到汇点的 ...
- 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
随机推荐
- PL/SQL中复制粘贴表结构信息
1.打开下图中的Tables文件夹 2.查找要找的表 3.右键单击找到的表—>Describe 4.复制所需的数据到EXCEL表中
- 常用yum源
#epel源 [myepel] name=zheda baseurl=http://mirrors.zju.edu.cn/epel/6/x86_64/ gpgcheck= enabled= #mysq ...
- C++解析(30):关于指针判别、构造异常和模板二义性的疑问
0.目录 1.指针的判别 2.构造中的异常 2.1 如果构造函数中抛出异常会发生什么? 2.2 如果析构函数中抛出异常会发生什么? 3.令人迷惑的写法 3.1 模板中的二义性 3.2 函数异常声明 4 ...
- Python清理过期文件
改程序执行后,会清理 test/文件夹中距离现在超过一天的以 .xml 结尾的文件 # coding: utf-8 import time import os root = os.path.dirna ...
- Spark集群基础概念 与 spark架构原理
一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...
- 【agc006C】Rabbit Exercise
Portal --> agc006C Solution 啊感觉是好有意思的一道题qwq官方题解里面的说辞也是够皮的哈哈哈..(大概就是说如果你没有意识到那个trick的话这题这辈子都做不出来qw ...
- dorado事件
//----------------------------------------------------------------------------// //校验实体数据是否填写if(enti ...
- 前端PHP入门-002-安装WAMP的集成环境md
> 第一次讲PHP,让我感觉还是满好玩的,一种新的知识的学习,需要我们努力! > 这次PHP课程计划是15天快速入门的课程! 只是单独的讲PHP语言,不涉及很深的内容,只是想让web前端的 ...
- MingW和MSVC默认的编码方式不一样
同一份源代码,源文件编码格式为UTF-8: string tmp = "我"; ;i<tmp.size();++i) { printf("%0x ",tm ...
- docker操作mysql
Docker操作mysql 查找docker hub上的mysql镜像 Docker search.mysql 拉取官方的镜像标签为5.6 Docker pull mysql:5.6 在本地镜像列表里 ...