bzoj2763: [JLOI2011]飞行路线 最短路
题意:求最多可以有k条路免费的最短路
题解:用dis[x][k]表示从s开始用了k次免费机会到x的最短路,然后dij跑的时候优先队列里多维护一个k就好了
/**************************************************************
    Problem: 2763
    User: walfy
    Language: C++
    Result: Accepted
    Time:272 ms
    Memory:4528 kb
****************************************************************/
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 20101009
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
using namespace std;
const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=10000+10,maxn=200000+10,inf=0x3f3f3f3f;
struct edge{
    int to,Next,c;
}e[maxn];
int cnt,head[N];
void init()
{
    cnt=0;
    memset(head,-1,sizeof head);
}
void add(int u,int v,int c)
{
    e[cnt].to=v;
    e[cnt].c=c;
    e[cnt].Next=head[u];
    head[u]=cnt++;
}
struct node{
    int d,id,num;
    bool operator <(const node&rhs)const
    {
        return d>rhs.d||d==rhs.d&&id<rhs.id;
    }
};
int dis[N][12];
priority_queue<node>q;
int n,m,k,s,t;
void dij()
{
    memset(dis,inf,sizeof dis);
    dis[s][0]=0;
    q.push({dis[s][0],s,0});
    while(!q.empty())
    {
        node u=q.top();q.pop();
        if(u.d>dis[u.id][u.num])continue;
        for(int i=head[u.id];~i;i=e[i].Next)
        {
            int x=e[i].to;
            if(dis[x][u.num]>dis[u.id][u.num]+e[i].c)
            {
                dis[x][u.num]=dis[u.id][u.num]+e[i].c;
                q.push({dis[x][u.num],x,u.num});
            }
            if(u.num<k&&dis[x][u.num+1]>dis[u.id][u.num])
            {
                dis[x][u.num+1]=dis[u.id][u.num];
                q.push({dis[x][u.num+1],x,u.num+1});
            }
        }
    }
}
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    scanf("%d%d",&s,&t);s++,t++;
    init();
    while(m--)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);a++,b++;
        add(a,b,c);add(b,a,c);
    }
    dij();
    int ans=inf;
    for(int i=0;i<=k;i++)ans=min(ans,dis[t][i]);
    printf("%d\n",ans);
    return 0;
}
/********************
********************/
												
											bzoj2763: [JLOI2011]飞行路线 最短路的更多相关文章
- BZOJ2763 JLOI2011 飞行路线 【最短路+DP】
		
BZOJ2763 JLOI2011 飞行路线 Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n ...
 - BZOJ2763[JLOI2011]飞行路线 [分层图最短路]
		
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2523 Solved: 946[Submit][Statu ...
 - BZOJ 2763: [JLOI2011]飞行路线 最短路
		
2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
 - bzoj千题计划226:bzoj2763: [JLOI2011]飞行路线
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2763 这也算分层图最短路? dp[i][j]到城市i,还剩k次免费次数的最短路 #include&l ...
 - bzoj2763: [JLOI2011]飞行路线(分层图spfa)
		
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3234 Solved: 1235[Submit][Stat ...
 - BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)
		
题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...
 - [bzoj2763][JLOI2011]飞行路线——分层图最短路
		
水题.不多说什么. #include <bits/stdc++.h> using namespace std; const int maxn = 10010; const int maxk ...
 - BZOJ2763 [JLOI2011]飞行路线  【分层图 + 最短路】
		
题目 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格 ...
 - BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
		
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...
 
随机推荐
- 英语笔记-some words about description of girl
			
what did you learn from your last class?20:09:07abc360.Draven/PHH-HA04 ☠ 2018/4/9 20:09:07 poop20:1 ...
 - Linux基础命令---diff
			
diff 逐行比较两个文本文件,把文件的差异显示到标准输出.如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录. 此命令的适用范围:RedHat.RHEL.Ubuntu ...
 - c/c++日期时间处理与字符串string转换
			
转自:https://www.cnblogs.com/renjiashuo/p/6913668.html 在c/c++实际问题的编程中,我们经常会用到日期与时间的格式,在算法运行中,通常将时间转化为i ...
 - div居中布局
			
利用margin属性可以实现div居中布局,把div的左边距和右边距设置为auto即可,代码如下 <!DOCTYPE html> <html> <head> < ...
 - MySQL Crash Course #03# Chapter 5. 6  排序. BETWEEN. IS NULL
			
索引 排序检索的数据 SQL 过滤 vs. 应用程序过滤 简单 Where 补充:大小写敏感. BETWEEN. IS NULL Sorting Retrieved Data mysql> SE ...
 - Python3: Windows系统上同时安装Python2和Python3
			
Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...
 - RS(纠删码)技术浅析及Python实现
			
前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...
 - flash,sram
			
flash写入的内容不会因电源关闭而失去,读取速度慢,成本较低,一般用作程序存储器或者低速数据读取的情况. sram有最快的读写速度,但电源掉落后其内容也会失去,价格昂贵,一般用作cpu的二级缓存,内 ...
 - Python3基础 list 访问列表中的列表的元素
			
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
 - POJ 1509 Glass Beads---最小表示法
			
题意: T组数据,每组数据给出一个字符串,求这个字符串的最小表示发(只要求输出起始位置坐标) SAM入门题(检测板子是否正确). 将字符串S加倍丢进SAM中,然后走字符串长度次,每次贪心的沿最小的边走 ...