人生中的第一道黑题。。。

其实就是k短路模板

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <queue>
using namespace std;
const int MAXN=400005;
int init(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return rv*fh;
}
int m,n,head1[MAXN],nume,head[MAXN];
double tot,dis[MAXN];
struct edge{
int to,nxt;
double dis;
}e[MAXN],e1[MAXN];
void adde1(int from,int to,double dis){
e1[++nume].to=to;
e1[nume].dis=dis;
e1[nume].nxt=head1[from];
head1[from]=nume;
}
void adde(int from,int to,double dis){
e[++nume].to=to;
e[nume].dis=dis;
e[nume].nxt=head[from];
head[from]=nume;
}
struct cmp{
bool operator ()(const int &a,const int &b) const{
return dis[a]>dis[b];
}
};
void dij(){
priority_queue <int,vector<int> ,cmp> q;
q.push(n);
memset(dis,0x7f,sizeof(dis));
dis[n]=0;
while(!q.empty()){
int u=q.top();q.pop();
for(int i=head1[u];i;i=e1[i].nxt){
int v=e1[i].to;
if(dis[v]>dis[u]+e1[i].dis){
dis[v]=dis[u]+e1[i].dis;
q.push(v);
}
}
}
}
struct node{
int v;
double f,g;
bool operator < (const node &a)const{
if(this->f==a.f) return (this->g)>a.g;
return (this->f)>a.f;
}
};
void A_star(){
node s;
int cnt=0;
s.v=1;s.f=dis[1];s.g=0.0;
priority_queue <node>q;
q.push(s);
while(!q.empty()){
node u=q.top();q.pop();//cout<<u.v<<" "<<u.f<<" "<<u.g<<endl;
if(u.v==n){
//cout<<tot<<endl;
if(tot>=u.g) tot-=u.g,cnt++;
else{
cout<<cnt<<endl;
return;
}
}
for(int i=head[u.v];i;i=e[i].nxt){
node v;
v.v=e[i].to;
v.g=u.g+e[i].dis;
v.f=v.g+dis[e[i].to];
//if(v.v==n) cout<<v.f<<endl;
q.push(v);
}
}
cout<<1<<endl;
}
int main(){
n=init();m=init();scanf("%lf",&tot);
for(int i=1;i<=m;i++){
int u=init(),v=init();
double di;
scanf("%lf",&di);
adde1(v,u,di);
}
dij();
// cout<<dis[1]<<endl;
nume=0;
for(int i=1;i<=n;i++){
for(int j=head1[i];j;j=e1[j].nxt){
int v=e1[j].to;
adde(v,i,e1[j].dis);
}
}
//cout<<e[1].dis<<endl;
// for(int i=head[1];i;i=e[i].nxt) cout<<e[i].to<<endl;
A_star();
return 0;
}

洛谷 [P2483] [模板] k短路的更多相关文章

  1. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  2. 【洛谷 P2483】 【模板】k短路([SDOI2010]魔法猪学院)(A*)

    题目链接 优先队列bfs第一次出队就是最短路,那么显然第k次出队就是k短路 ?????????????????????????????? 书上写的 但是直接优先队列bfs会T,所以用A*优化就行,估价 ...

  3. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  4. 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  5. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

  6. 洛谷.1919.[模板]A*B Problem升级版(FFT)

    题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...

  7. 洛谷.3803.[模板]多项式乘法(FFT)

    题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...

  8. 洛谷.3803.[模板]多项式乘法(NTT)

    题目链接:洛谷.LOJ. 为什么和那些差那么多啊.. 在这里记一下原根 Definition 阶 若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\ ...

  9. 洛谷 P2176(最短路)

    ###题目链接 洛谷 P2176 ### 题目大意: 已知农夫从 1 走到 N 点,一定走的是最短路.问你将某条路的长度变为其两倍后,农夫从 1 走到 N 点的路程最大增加多少,输出最大增量. 分析: ...

随机推荐

  1. jsp/servlet相关技术及知识

    JSP页面的内容由两部分组成: 静态部分:标准的HTML标签.静态的页面内容, 动态部分:受Java程序控制的内容,这些都由java语言动态生成 简单的jsp页面代码: <%@ page lan ...

  2. 为什么vertical-align不起作用

    先看一段代码 <style> .title { margin:50px; color:blue; } .title span { font-size:24px; } .title span ...

  3. 拿到List<Map<String,String>>对用属性的值。。。。。。。

    list.get(i).get("orderNumber") 来拿到下面的对应属性的值

  4. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  5. 从零开始学习前端JAVASCRIPT — 6、JavaScript基础DOM

    1:DOM(Document  Object  Model)的概念和作用 document对象是DOM核心对象:对html中的内容,属性,样式进行操作. 节点树中节点之间的关系:父子,兄弟. 2:DO ...

  6. 怎么获取smtp服务器用户帐号和密码

    在OE里工具-帐户..-添加-邮件 打开选项卡,依次填好,昵称,按下一步,邮箱地址,按下一步,填POP和SMTP服务器地址,按下一步,按用户名和密码,再按下一步就设置好了.有些邮件服务器在发信的时候, ...

  7. thinkphp开发微信公众号时,验证基本配置提示请求url超时

    原因在index.php入口文件中必须有define('APP_NAME', 'Weixin'); 服务器url:http://bxu2713700584.my3w.com/Weixin/Index/ ...

  8. Python3 的元组

    元组(tuple):戴上了枷锁的列表 元组与列表非常相似但是元组内元素的类型相同,且元组内的元素不能修改 1.创建元组的方法 与列表不同创建元组大部分情况下是用小括号,例如 tuple1=(1,2,3 ...

  9. JavaScript对象的valueOf()方法

    js对象中的valueOf()方法和toString()方法非常类似,但是,当需要返回对象的原始值而非字符串的时候才调用它,尤其是转换为数字的时候.如果在需要使用原始值的上下文中使用了对象,JavaS ...

  10. 04 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之高并发优化

    Github:https://github.com/nnngu 项目源代码:https://github.com/nnngu/nguSeckill 关于并发 并发性上不去是因为当多个线程同时访问一行数 ...