【洛谷P1073】[NOIP2009]最优贸易
最优贸易
看题解后感觉分层图好像非常NB巧妙
建三层n个点的图,每层图对应的边相连,权值为0
即从一个城市到另一个城市,不进行交易的收益为0
第一层的点连向第二层对应的点的边权为-w[i],表示买入的收益
第二层的点连向第三层对应的点的边权为w[i],表示卖出的收益
这样跑一遍最长路,就可以了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define N 300030
#define M 1200030
int n,m,dis[N],tot,Head[N];
queue<int> q;
bool inque[N];
struct NODE{
int to,next,w;
} e[M];
inline int read(){
int x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') { x=(x<<)+(x<<)+c-''; c=getchar(); }
return x;
}
inline void add(int x,int y,int w){
e[++tot].to=y;
e[tot].w=w;
e[tot].next=Head[x];
Head[x]=tot;
}
inline void unionn(int x,int y){
add(x,y,);
add(x+n,y+n,);
add(x+n+n,y+n+n,);
}
int main()
{
n=read(); m=read();
int x,y,z;
for(int i=;i<=n;i++){
x=read();
add(i,i+n,-x);
add(i+n,i+n+n,x);
}
add(n,n+n+n+,);
for(int i=;i<=m;i++){
x=read(); y=read(); z=read();
unionn(x,y);
if(z==) unionn(y,x);
}
add(n+n+n,n+n+n+,);
memset(dis,-,sizeof(dis));
q.push(); dis[]=;
while(!q.empty()){
int u=q.front(); q.pop();
inque[u]=;
for(int i=Head[u];i;i=e[i].next){
int v=e[i].to;
if(dis[v]<dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
if(!inque[v]){
inque[v]=;
q.push(v);
}
}
}
}
printf("%d\n",dis[n+n+n+]);
return ;
}
【洛谷P1073】[NOIP2009]最优贸易的更多相关文章
- 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)
次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...
- 洛谷1073 NOIP2009 最优贸易
题目大意 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- 【洛谷P1073】最优贸易
题目大意:给定一个 N 个点,M 条边(存在反向边)的有向图,点有点权,求一条从 1 到 N 的路径上,任意选出两个点 p,q (p 在前,q在后),两点点权的差值最大. 根据最短路的 dp 思想,可 ...
- 【洛谷 P1073】 最优贸易 (Tarjan缩点+拓扑排序)
题目链接 先\(Tarjan\)缩点,记录每个环内的最大值和最小值. 然后跑拓扑排序,\(Min[u]\)表示到\(u\)的最小值,\(ans[u]\)表示到\(u\)的答案,\(Min\)和\(an ...
- [Luogu 1073] NOIP2009 最优贸易
[Luogu 1073] NOIP2009 最优贸易 分层图,跑最长路. 真不是我恋旧,是我写的 Dijkstra 求不出正确的最长路,我才铤而走险写 SPFA 的- #include <alg ...
- [NOIP2009]最优贸易(图论)
[NOIP2009]最优贸易 题目描述 CC 国有 \(n\) 个大城市和 \(m\) 条道路,每条道路连接这 \(n\) 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 \(m\ ...
- 洛谷 P1073 最优贸易 & [NOIP2009提高组](反向最短路)
传送门 解题思路 很长的题,实际上在一个有向图(点有点权)中求一个从起点1到终点n的路径,使得这条路径上点权最大的点与点权最小的点的差值最大(要求必须从点权较小的点能够走到点权较大的点). ——最短路 ...
- 洛谷 P1073 最优贸易 解题报告
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...
- 洛谷P1073 最优贸易 [图论,DP]
题目传送门 最优贸易 题目描述 C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分为双向 ...
随机推荐
- centOS7关闭防火墙的命令
centOS7下关闭防火墙的命令已经改了,如下: systemctl stop firewalld
- NetCDF 共享软件 中文
NetCDF 共享软件 转载 在 Models-3 模式中,使用的数据存取接口称为 I/O API,其实就是 NetCDF 文件格式.而由于我们需要了解 Models-3 输出档案的数据情况,因此 ...
- mongo 多条件or
or语句 or b=2 > db.XXX.find({"$or":[{"a":1}, {"b":2}]}); 等于java mong ...
- 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
安装VMware Workstation 12 Player出现如下问题: 解决方法: 1.出现这个问题的时候不要点确定(如果点了确定,会找不到步骤4中的文件夹) 2.win+R调出 '运行' 3.输 ...
- [转]Session and application state in ASP.NET Core
本文转自:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state By Rick Anderson and Steve ...
- [转]谷歌Chrome浏览器开发者工具教程—JS调试篇
来源:http://blog.csdn.net/cyyax/article/details/51242720 上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工 ...
- MySQL8.0加载文件内容报错: ERROR 1148: The used command is not allowed with this MySQL version
mysql数据库将文件内容加载到表中报错: mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINAT ...
- Facade模式实现文件上传(Flash+HTML5)
一.前言 确定了渐进式增强的上传方式,接下来我们需要将上传功能从具体的业务逻辑中剥离出来,作为公共组件供业务层调用.这就要求我们必须对业务层隐藏上传细节,只暴露统一的上传API.这时候大家是不是跟我一 ...
- LI居中
在用UL-LI时,有适合需要将Li里面的内容居中显示:方法有两种:(推荐)1.设置LI的display为inline(规定应该从父元素继承 display 属性的值),为LI设置长度,设置text-a ...
- Python爬虫之requests模块(2)
一.今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 二.回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 三. ...