【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解
题目链接:https://www.luogu.org/problemnew/show/P2939
本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了。
所以多学一种优先队列优化。
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const ll maxn = 200000 + 10;
const ll inf = 2147483647;
inline ll read()
{
    ll k=0,f=1;
    char c=getchar();
    while(!isdigit(c))
    {
        if(c=='-')f=-1;
        c=getchar();
    }
    while(isdigit(c))
    {
        k=(k<<1)+(k<<3)+c-48;
        c=getchar();
    }
    return k*f;
}
ll n, m, k, s, end, dis[maxn][30];
bool vis[maxn][30];
struct edge{
    ll from, len, to, next;
}e[maxn<<2];
ll head[maxn], cnt = 0;
struct que{
    ll a, b;
};
struct cmp{
	bool operator ()(que &x, que &y)
	{
		return dis[x.a][x.b] > dis[y.a][y.b];
	}
};
priority_queue<que, vector<que>, cmp> q;
void add(ll u, ll v, ll w)
{
    e[++cnt].from = u;
    e[cnt].to = v;
    e[cnt].len = w;
    e[cnt].next = head[u];
    head[u] = cnt;
}
void SPFA()
{
    memset(dis, 127, sizeof(dis));
    memset(vis, 0, sizeof(vis));
    q.push((que){s,0});
    dis[s][0] = 0;
    vis[s][0] = 1;
    while(!q.empty())
    {
        que now = q.top(); q.pop();
        vis[now.a][now.b] = 0;
        for(ll i = head[now.a]; i != -1; i = e[i].next)
        {
            if(dis[e[i].to][now.b] > dis[now.a][now.b] + e[i].len)
            {
               dis[e[i].to][now.b] = dis[now.a][now.b] + e[i].len;
               if(vis[e[i].to][now.b] == 0)
               {
                  vis[e[i].to][now.b] = 1;
                  q.push((que){e[i].to, now.b});
					}
            }
            if(now.b + 1 <= k)
            {
                if(dis[e[i].to][now.b + 1] > dis[now.a][now.b])
                {
                    dis[e[i].to][now.b + 1] = dis[now.a][now.b];
                    if(vis[e[i].to][now.b + 1] == 0)
                    {
                        vis[e[i].to][now.b + 1] = 1;
                        q.push((que){e[i].to, now.b + 1});
                    }
                }
            }
        }
    }
}
int main()
{
    memset(head, -1, sizeof(head));
    n = read(); m = read(); k = read();
    s = 1, end = n;
    for(ll i = 1; i <= m; i++)
    {
        ll u, v, w;
        u = read(); v = read(); w = read();
        add(u, v, w); add(v, u, w);
    }
    SPFA();
    printf("%lld",dis[end][k]);
    return 0;
}
												
											【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解的更多相关文章
- 洛谷 P2939 [USACO09FEB]改造路Revamping Trails 题解
		
P2939 [USACO09FEB]改造路Revamping Trails 题目描述 Farmer John dutifully checks on the cows every day. He tr ...
 - LUOGU P2939 [USACO09FEB]改造路Revamping Trails
		
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
 - P2939 [USACO09FEB]改造路Revamping Trails
		
P2939 [USACO09FEB]改造路Revamping Trails 同bzoj2763.不过dbzoj太慢了,bzoj又交不了. 裸的分层图最短路. f[i][j]表示免费走了j条路到达i的最 ...
 - 洛谷P2939 [USACO09FEB]改造路Revamping Trails
		
题意翻译 约翰一共有\(N\))个牧场.由\(M\)条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场\(1\)出发到牧场\(N\)去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰 ...
 - 洛谷 P2939 [USACO09FEB]改造路Revamping Trails
		
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
 - 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
		
题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...
 - Luogu 2939 [USACO09FEB]改造路Revamping Trails   &&   Luogu 4568 [JLOI2011]飞行路线
		
双倍经验 写这两题之前被大佬剧透了呜呜呜. 分层图+最短路. 因为有$k$次机会能够把路径的费用变为$0$,我们可以建$k + 1$层图,对于每一层图我们把原来的边权和双向边连到上面去,而对于层与层之 ...
 - P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)
		
传送门 完了我好像连分层图最短路都不会了……果然还是太菜了…… 具体来说就是记录一个步数表示免费了几条边,在dijkstra的时候以步数为第一关键字,距离为第二关键字.枚举边的时候分别枚举免不免费下一 ...
 - [USACO09FEB] 改造路Revamping Trails | [JLOI2011] 飞行路线
		
题目链接: 改造路 飞行路线 其实这两道题基本上是一样的,就是分层图的套路题. 为什么是分层图呢?首先,我们的选择次数比较少,可以把这几层的图建出来而不会爆空间.然后因为选择一个边权为0的路线之后我们 ...
 
随机推荐
- 023-将表单序列化为json对象
			
使用jQuery将表单序列化为json对象,其中serializeJson方法的名字任意,serializeArray()这个jQuery提供的方法.this指的就是谁调用了这个方法. $.fn.se ...
 - pat00-自测2. 素数对猜想 (20)
			
00-自测2. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn ...
 - HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】
			
理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class n ...
 - MVC中提交表单的4种方式
			
一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...
 - bootstrap dialog对话框,完成操作提示框
			
1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...
 - java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)
			
倒计时程序 涉及到的东西: javafx简单的界面,布局,按钮,文本框,事件响应 java.util.Timer,用于定时 SimpleDateFormat用于在String和Date之间转换. ja ...
 - Java基础入门 - 简介
			
官网:https://www.oracle.com Java分为三个体系: JavaEE: Java Platform, Enterprise Edition, Java平台企业版 JavaSE: J ...
 - hdu 1255 矩形覆盖面积(面积交)
			
http://www.cnblogs.com/scau20110726/archive/2013/04/14/3020998.html 面积交和面积并基本上差不多.在面积并里,len[]记录的是覆盖一 ...
 - vue打包(npm run build)时错误记录
			
vue项目打包时,报错如下: 问题分析:semver.js报错,版本不正确,解决办法,打包时忽略版本检查 解决办法:
 - 转 【<meta name="description" content=">】作用讲解
			
今天在看别人写的网站代码,发现类似<meta name="Keywords" content="" >.<meta name="De ...