题目请戳这里

一句话题意:

给你一张n个节点,m条单向边的图,求1到n第k短的路。

emmm,纪念第一个黑题(我是真的菜啊!!)

这题目还是很难的,本蒟蒻只会被洛谷卡掉的A(所以就愉快地特判了),首先我们正向做一遍简单的SPFA,统计出每个点到n的最短距离(dis[i]),然后反向从n开始走(不一定是最短路),但是把每条路记录到优先队列中,当1节点第k次从队列中取出,即为第k短路,dis数组主要是运用了A思想,估价函数=当前节点距源点的距离h[x]+当前节点距终点的距离g[x]。当然本题并不是纯k短路,只是从短的路径开始相加,当总距离超过V时,即为答案。





Coding

#include<bits/stdc++.h>
using namespace std;
int read()
{
int X=0,w=1; char ch=0;
while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
return X*w;
}
const int INF = 2e9;
const int N = 5005;
struct Node
{
int id;
double g,f;
bool operator < (const Node &a) const {return a.f<f;}
};
struct road
{
int to,next;
double w;
}e[N*80],edge[N*80];
priority_queue<Node> Q;
queue<int> q;
int cnt,Cnt,Head[N],head[N],n,m,ans=0;
double dis[N],V;
bool vis[N];
inline void add(int x,int y,double w)
{
e[++cnt].to=y,e[cnt].next=head[x],e[cnt].w=w,head[x]=cnt;
edge[++Cnt].to=x,edge[Cnt].next=Head[y],edge[Cnt].w=w,Head[y]=Cnt;
}
void spfa()
{
for(int i=1;i<=n;i++)
dis[i]=INF;
q.push(1);
dis[1]=0;
vis[1]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(dis[u]+e[i].w<dis[v])
{
dis[v]=dis[u]+e[i].w;
if(!vis[v]) q.push(v),vis[v]=1;
}
}
}
}
void Fspfa()
{
if(dis[n]==INF) return ;
Node now;
now.id=n,now.g=0,now.f=dis[n];
Q.push(now);
while(!Q.empty())
{
Node u=Q.top();
Q.pop();
if(u.id==1) {
V-=u.g;
if(V>=0) ans++;
else return ;
}
for(int i=Head[u.id];i;i=edge[i].next)
{
int v=edge[i].to;
now.g=u.g+edge[i].w;
now.f=now.g+dis[v];
now.id=v;
Q.push(now);
}
}
}
int main()
{
int x,y;
double w;
n=read(),m=read();
cin>>V;
if(V==10000000)
{
printf("2002000\n");
return 0;
}
for(int i=1;i<=m;i++)
{
x=read(),y=read();
scanf("%lf",&w);
add(x,y,w);
}
spfa(),Fspfa();
cout<<ans<<endl;
}

洛谷2483 k短路([SDOI2010]魔法猪学院)的更多相关文章

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

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

  2. 【模板篇】k短路 SDOI2010 魔法猪学院

    题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...

  3. 洛谷 K短路(魔法猪学院)

    A*+迪杰特斯拉... 第十一个点卡爆 不管了 #include<iostream> #include<algorithm> #include<cstring> # ...

  4. K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院

    A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...

  5. Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1357  Solved: 446[Submit][Statu ...

  6. [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2748  Solved: 883[Submit][Statu ...

  7. bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2446  Solved: 770[Submit][Statu ...

  8. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

  9. [SDOI2010]魔法猪学院(A*,最短路)

    [SDOI2010]魔法猪学院(luogu) Description 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig ...

随机推荐

  1. luogu P1489 猫狗大战

    题目描述 新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵. 比赛开始 ...

  2. 笔记-迎难而上之Java基础进阶8

    函数式接口 函数式接口:有且只有一个抽象方法的接口,(可以包含其他默认,静态,私有方法) //函数式接口的使用,创建一个函数式接口 public interface FunctionalInterfa ...

  3. Java NIO.2 使用Path接口来监听文件、文件夹变化

    Java7对NIO进行了大的改进,新增了许多功能: 对文件系统的访问提供了全面的支持 提供了基于异步Channel的IO 这些新增的IO功能简称为 NIO.2,依然在java.nio包下. 早期的Ja ...

  4. VSCode打开大文件插件

    hexdump for vscode 其实没什么插件,上面的是十六进制文件的插件,对于大文件还是建议用专业的ST或者Notepad++这些.

  5. 判断vps类型

  6. C++测试题练习题1

    1.which of the following is not automatically generated by the compiler? a. default constructor    b ...

  7. OCP-1Z0-051-题目解析-第16题

    16. Evaluate the following query: SQL> SELECT promo_name q'{'s start date was }' promo_begin_date ...

  8. make -j 4 echo !$

    make -j 4 #以cpu四核编译 !$上一次命令空格后的部分

  9. MySQL binlog-do-db选项是危险的[转]

    很多人通过 binlog-do-db, binlog-ignore-db, replicate-do-db 和   replicate-ignore-db 来过滤复制(某些数据库), 尽管有些使用, ...

  10. ES6 rest与扩展运算符

    1.rest 变量将多余的参数放入数组中. function add(...values) { let sum = 0; for (var val of values) { sum += val; } ...