bzoj 3281: 小P的烦恼 支配树算法+dp

小P的高等代数挂科,为免挂科,他需帮助老师解决漂流路线问题。在有向无环图中,找到最短的危险桥路径,利用两条长度为l的安全绳覆盖。解决方案包括运用支配树算法找出桥,并通过动态规划(DP)优化路径。
摘要由CSDN通过智能技术生成

题意

小 P 最近遇上了大麻烦,他的高等代数挂科了。于是他只好找高代老师求情。善良的高代老师答应不挂他,但是要求小 P 帮助他一起解决一个难题。
问题是这样的,高代老师近期要组织班上同学一起去漂流,漂流可以看做是在一张 n 个点 m 条边的有向无环图上进行的,点编号从 0 到 n-1 ,表示景点; 边是连接各景点的一定长度的河道。同时,定义编号为 s 是起点而 t 是终点。我们不妨把从 s 点到 t 点不论走什么样的路径都需要经过的边称为桥, 这些桥由于地势险要所以是危险的。现在高代老师有两条长度为 l 的安全绳,他希望用这两条安全绳覆盖尽可能长的桥,使得他们通过的桥的长度之和尽量短。
,n<=100000, m<=200000,0<=s,t,si,ti

分析

首先把桥求出来。这里可以用到支配树算法,具体可以看这篇文章
然后只要随便dp一下就好了。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;

typedef long long LL;

const int N=100005;
const LL inf=(LL)1e15;

int n,m,last[N],ls[N],cnt,rd[N],size[N],a1,a[N],s,t,tos[N],dep[N],fa[N][17];
LL bri[N],dis[N],f[N][3],d[N],L;
struct edge{
  int to,next;LL w;}e[N*4];
queue<int> que;
stack<int> sta;
bool pro[N],arr[N];

int read()
{
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9'){
  if(ch=='-')f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=ge
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值