首页 > 其他分享 >Subsequence Path(图论,DP)

Subsequence Path(图论,DP)

时间:2022-10-08 15:01:17浏览次数:70  
标签:int ll 路径 leq Subsequence DP Path include 号点

题意

给定\(N\)个点,\(M\)条边的无向图,边权为\(C_i\)。

给定一个序列\(E = (E_1, E_2, \dots, E_K)\),其中\(E_i\)表示边的编号。

路径是“好路径”当且仅当边的编号按照经过顺序排序,为\(E\)的子序列(不要求连续)。

求从\(1\)号点到\(N\)号点的好路径中的最短路。

题目链接:https://atcoder.jp/contests/abc271/tasks/abc271_e

数据范围

\(2 \leq N \leq 2 \times 10^5\)
\(1 \leq M, K \leq 2 \times 10^5\)
\(1 \leq C_i \leq 10^9\)
\(1 \leq E_i \leq M\)

思路

这道题独立做出来了,但是由于这个题目非常经典,因此在这里记录一下做法。

考虑DP,\(f(i)\)表示从\(1\)号点通过好路径到达\(i\)号点的最短路径长度。并将\(f\)初始化为\(+\infty\)

遍历\(E\)序列,表示路径的最后一条边为\(E_i\),然后更新\(f\)。这样即可得到\(1\)号点到所有点的最短距离了。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N = 200010;

int n, m, k;
ll f[N];
int a[N];

struct Edge
{
    int u, v;
    ll w;
}e[N];

int main()
{
    scanf("%d%d%d", &n, &m, &k);
    for(int i = 1; i <= m; i ++) {
        int u, v;
        ll w;
        scanf("%d%d%lld", &u, &v, &w);
        e[i] = {u, v, w};
    }
    for(int i = 1; i <= k; i ++) scanf("%d", &a[i]);
    for(int i = 1; i <= n; i ++) f[i] = 1e18;
    f[1] = 0;
    for(int i = 1; i <= k; i ++) {
        int id = a[i];
        int u = e[id].u, v = e[id].v;
        ll w = e[id].w;
        f[v] = min(f[v], f[u] + w);
    }
    if(f[n] == 1e18) f[n] = -1;
    printf("%lld\n", f[n]);
    return 0;
}

标签:int,ll,路径,leq,Subsequence,DP,Path,include,号点
From: https://www.cnblogs.com/miraclepbc/p/16768936.html

相关文章

  • TCP和UDP的联系和区别
    一、联系   TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。二、区别   1、TCP面向连接,UDP是无连接的,即......
  • 1: TCP与UDP的联系与区别 2:网络字节序与主机字节序的转换函数实践。
    第一问:TCP/IP协议是一个协议簇,里面包括很多协议的,UDP只是其中的一个,之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,......
  • TCP和UDP的区别和联系
    UDP与TCP的联系与区别:1、联系首先,这两个都是运输层协议;都是建立在ip之上的TCP叫做流式套接字,UDP是报文套接字为什么要在IP之上?  2、区别tcp基于连接、UDP......
  • HDU7239 Matryoshka Doll (DP)
    题目大意:题目描述.有......
  • TCP与UDP的联系与区别
    TCP(TransmissionControlProtocol,传输控制协议)他是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。这说明TCP连接是一个非常复杂的过程,需要进行“三......
  • WinForm分辨率适应-高DPI自动缩放
    https://www.cnblogs.com/alittlecooing/p/WinForm-HighDPI.html新建app.manifest文件后,去掉注释就可......
  • 关于request.getServletPath(),request.getContextPath()的总结
    最近对于request中的几种“路径”有点混淆,查找网上资源都没有很好的总结,希望此文章能够帮助我理解一下这几种“路径”。+++++++++++++++++++++++++++++++++++++++++++++++......
  • 【gym102979E】Expected Distance(期望DP)
    ExpectedDistance题目链接:gym102979E题目大意有一棵树,第i个点的父亲再1~i-1中根据每个数的a值乘正比概率出现,然后边的长度是两端的点的b值的和。然后多组询问......
  • go: can only use path@version syntax with 'go get' and 'go install' in module-aw
    一:非gomod模式需要在go文件目录下的src创建代码但是后面的版本一般做项目部管理不适用上述方法也不会出现go:canonlyusepath@versionsyntaxwith'goget'and......
  • TCP与UDP的联系与区别
    TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来......