博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
阅读量:5228 次
发布时间:2019-06-14

本文共 1655 字,大约阅读时间需要 5 分钟。

传送门

题意&简要做法

一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\leq E\)

可以转化为求K短路。注意这里不需要二分,只要不断取得剩下的路径里的最短路,累加权值直到超过E即可。

细节

原题&洛谷上有256M空间,BZOJ上只有64M,坑啊...

加入一些剪枝,在当前路径长度>E时直接不加入。

将double的值乘上一个很大的数,转换成long long,跑得快了一点,据说可以避免一些精度误差。

代码

#include 
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
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
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

转载于:https://www.cnblogs.com/will7101/p/6708042.html

你可能感兴趣的文章
读《深入理解Elasticsearch》点滴-改善查询相关性
查看>>
RabbitMQ 使用(一)
查看>>
强大的PHP压缩与解压缩zip类
查看>>
[DELPHI]$2501錯誤處理
查看>>
c#小数取整
查看>>
Margin和padding失效
查看>>
cdcq的独立博客上线辣!-> http://cdcq.coding.me/blog/
查看>>
MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication
查看>>
SqlServer体系结构
查看>>
jquery学习--选择器
查看>>
简析TCP的三次握手与四次断开
查看>>
R语言 多元线性回归分析
查看>>
Linux操作系统-命令-aptitude install unzip
查看>>
数字的可视化:python画图之散点图sactter函数详解
查看>>
R语言For循环
查看>>
requests---自动写博客
查看>>
codility上的练习(5)
查看>>
Java开发工程师(Web方向) - 03.数据库开发 - 第4章.事务
查看>>
spring boot约定优于配置的这种做法在如今越来越流行了
查看>>
搭建 LNMP 环境
查看>>