洛谷2483 k短路([SDOI2010]魔法猪学院)
题目请戳这里
一句话题意:
给你一张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]魔法猪学院)的更多相关文章
- 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- 【模板篇】k短路 SDOI2010 魔法猪学院
题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...
- 洛谷 K短路(魔法猪学院)
A*+迪杰特斯拉... 第十一个点卡爆 不管了 #include<iostream> #include<algorithm> #include<cstring> # ...
- K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院
A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...
- Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1357 Solved: 446[Submit][Statu ...
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2446 Solved: 770[Submit][Statu ...
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- [SDOI2010]魔法猪学院(A*,最短路)
[SDOI2010]魔法猪学院(luogu) Description 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig ...
随机推荐
- Elasticsearch搜索结果返回不一致问题
一.背景 这周在使用Elasticsearch搜索的时候遇到一个,对于同一个搜索请求,会出现top50返回结果和排序不一致的问题.那么为什么会出现这样的问题? 后来通过百度和google,发现这是因为 ...
- c# datetime是一年中的第几周
public static int WeekOfYear(DateTime dt, CultureInfo ci) { return ci.Calendar.GetWeekOfYear(dt, ci. ...
- 屏蔽国内广告的hosts
源码:https://github.com/easonjim/blackhosts bug提交:https://github.com/easonjim/blackhosts/issues
- Using Blocks in iOS 4: Designing with Blocks
In the first part of this series, we learned how to declare and call basic Objective-C blocks. The m ...
- eclipse中修改JDK版本
eclipse中,一个java项目依赖的JDK,需要进行绑定,但绑定的地方会有多个,类似层级结构. 1. eclipse的window -> preferences -> java com ...
- oracle软件安装完毕之后,如何创建数据库
oracle软件安装完毕之后,如何创建数据库 学习了:https://zhidao.baidu.com/question/1800966379896476147.html 使用了Database Co ...
- SGU 231 Prime Sum 求<=n内有多少对素数(a,b)使得a+b也为素数 规律题
题目链接:contest=0&problem=231">点击打开链接 题意: 求<=n内有多少对素数(a,b)使得a+b也为素数 思路: 我们发现全部素数间隔都是> ...
- vue2.0 仿手机新闻站(四)axios
1.axios的配置 main.js import Vue from 'vue' import App from './App.vue' // 引入 路由 import VueRouter from ...
- 获取服务器classes根路径
/** * 获取web应用路径 * @Description : 方法描述 * @Method_Name : getRootPath * @return * @return : String * @C ...
- ThinkPHP中的模型命名
当我们创建一个UserModel类的时候,其实已经遵循了系统的约定.ThinkPHP要求数据库的表名和模型类的命名遵循一定的规范,首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的 ...