题面

大家都是两遍SPFA吗?我这里就一遍dp啊;

首先判断对于一个点u,是否可以从一号点走到这里,并且可以从u走到n号点; 对于这样的点我们打上标记;

那么抛出水晶球的点一定是从打上标记的点中选出一个;(自己可以理解一下)

然后跑一遍dp,dp[i]表示从点1到点i的若干条路径中,所经过的点的权值最小的值;

比较明显的发现dp[v]可以从dp[u]继承过来(v是u的儿子),所以具有优美的DP性质;

最后ans=max(w[i]-dp[i]);

#include <bits/stdc++.h>
#define cin std::ios::sync_with_stdio(false); cin
#define cout std::ios::sync_with_stdio(false); cout
using namespace std;
int n,m;
struct littlestar{
int to;
int nxt;
}star[],star2[];
int head[],cnt,head2[],cnt2;
inline void add(int u,int v)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
head[u]=cnt;
}
inline void add2(int u,int v)
{
star2[++cnt].to=v;
star2[cnt].nxt=head2[u];
head2[u]=cnt;
}
int w[];
queue<int> q;
int bo1[],bo2[];
void bfs1(int s)
{
while(q.size()) q.pop();
q.push(s);
bo1[s]=;
while(q.size()){
int u=q.front();
q.pop();
for(register int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(!bo1[v]){
bo1[v]=;
q.push(v);
}
}
}
}
void bfs2(int s)
{
while(q.size()) q.pop();
q.push(s);
bo2[s]=;
while(q.size()){
int u=q.front();
q.pop();
for(register int i=head2[u];i;i=star2[i].nxt){
int v=star2[i].to;
if(!bo2[v]){
bo2[v]=;
q.push(v);
}
}
}
}
int f[];
int vis[];
void SPFA()
{
while(q.size()) q.pop();
for(register int i=;i<=n;i++) f[i]=;
q.push();
f[]=w[];
vis[]=;
while(q.size()){
int u=q.front();
q.pop();
vis[u]=;
for(register int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(!vis[v]){
vis[v]=;
if(f[v]==){
f[v]=min(f[u],w[v]);
q.push(v);
}
else{
if(f[u]<f[v]){
f[v]=f[u];
q.push(v);
}
}
}
}
}
}
int main()
{
cin>>n>>m;
for(register int i=;i<=n;i++){
cin>>w[i];
}
for(register int i=;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
if(w==){
add(u,v);
add2(v,u);
}
else{
add(u,v);
add2(v,u);
add(v,u);
add2(u,v);
}
}
bfs1();
bfs2(n);
SPFA();
int ans=;
for(register int i=;i<=n;i++){
if(bo1[i]&&bo2[i]){
ans=max(w[i]-f[i],ans);
}
}
cout<<ans<<endl;
}

洛谷 P1073 最优贸易 题解的更多相关文章

  1. 洛谷 P1073 最优贸易 解题报告

    P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...

  2. 洛谷P1073 最优贸易==codevs1173 最优贸易

    P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一 ...

  3. 洛谷——P1073 最优贸易

    P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...

  4. 洛谷 P1073 最优贸易 最短路+SPFA算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1073 最优贸易 题目描述 C国有 $ n $ 个大城市和 ...

  5. 洛谷P1073 最优贸易 [图论,DP]

    题目传送门 最优贸易 题目描述 C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分为双向 ...

  6. 洛谷 P1073 最优贸易 & [NOIP2009提高组](反向最短路)

    传送门 解题思路 很长的题,实际上在一个有向图(点有点权)中求一个从起点1到终点n的路径,使得这条路径上点权最大的点与点权最小的点的差值最大(要求必须从点权较小的点能够走到点权较大的点). ——最短路 ...

  7. [NOIP2009] 提高组 洛谷P1073 最优贸易

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  8. 洛谷 P1073 最优贸易

    题目描述 CC C 国有 n n n 个大城市和 m mm 条道路,每条道路连接这 nnn 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 mmm 条道路中有一部分为单向通行的道路 ...

  9. NOIP2009 codevs1173 洛谷P1073 最优贸易

    Description: 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通 ...

随机推荐

  1. CSP-S2 游记

    CSP-S2 游记 & AFO 感想 Day0 早上考了一场式,非常简单,但是懒得写正解.230pts. 晚上听了一下WYQ大神的考前直播,写了一下树上倍增(我是不会告诉你我还写炸了) 与lu ...

  2. iptables中DNAT和SNAT转发的配置方法

    1.一对一流量完全DNAT 首先说一下网络环境,普通主机一台做防火墙用,网卡两块 eth0 192.168.0.1  内网 eth1 202.202.202.1 外网 内网中一台主机 192.168. ...

  3. fiddler(一)、下载及安装

    fiddler 官网地址:https://www.telerik.com/fiddler 进入页面后点击 Free download 进入下载页面,填写用途,邮箱和国家等信息后,点击Download ...

  4. HAOI2018简要题解

    大概之后可能会重写一下,写的详细一些? Day 1 T1 简单的背包:DP 分析 可以发现,如果选出了一些数,令这些数的\(\gcd\)为\(d\),那么这些数能且仅能组合成\(\gcd(d,P)\) ...

  5. Spring Boot教程(二十七)整合Spring Security

    在这一节,我们将对/hello页面进行权限控制,必须是授权用户才能访问.当没有权限的用户访问后,跳转到登录页面. 添加依赖 在pom.xml中添加如下配置,引入对Spring Security的依赖. ...

  6. codefroces Round #201.a--Difference Row

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description You wa ...

  7. 利用freemarker生成word,word另存为xml文件的标签解析

    http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYU ...

  8. Python列表解析和字典解析

    python笔记_列表解析 相比于for循环,列表解析的语法是由底层c语言实现的,它和使用for循环遍历pyobject对象相比,性能会有很大的提升. 无条件子句的列表解析式 In [2]: [2*i ...

  9. 【学习】SpringBoot之简介、特点、缺点、应用场景

    Spring Boot 的介绍 SpringBoot的目的在于创建和启动新的基于Spring框架的项目.Spring Boot 会选择最合适的Spring子项目和第三方开源库进行整合.大部分Sprin ...

  10. windows spark1.6

    jdk1.7 scala 2.10.5 spark 1.6.1 http://spark.apache.org/downloads.html hadoop 2.6.4 只需要留bin https:// ...