【洛谷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 条道路中有一部分为单向通行的道路,一部分为双向 ...
随机推荐
- Eclipse的企业开发时常用快捷键使用、优化配置(博主推荐)
不多说,直接上干货! 一.简介 eclipse可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为什么使用它 ...
- opensuse 安装oracle 界面乱码
执行.runInstall时,出现界面乱码 export LANG=en_US export LC_ALL=en_US 终端里 执行这两句.用英文界面安装 再执行 .runInstall
- c#-FrameWork01
Framwork ArrayList l 集合类似于数组,同样是用来存放连续数据的,但集合的功能比数组更强大 l 集合和数组的最大区别:数组一旦定义以后就无法改变其大小,而集合可以动态的改变其大小 ...
- C# .net页面乱码
可在web.config中设置 <globalization requestEncoding="utf-8" responseEncoding="utf-8&quo ...
- 实现JFileChooser的多种文件类型限制(设置过滤器)
使用时直接调用方法. // 多类型时使用 public void FileFilter(JFileChooser F) { String[][] fileNames = { { ".java ...
- ActiveReport报表更改连接字符串及参数
PageReport pr = new PageReport (new FileInfo("报表路径")); //报表路径如../Order/OrderSale.rdlx if(p ...
- idea tomcat 日志的存放路径
idea的项目发布web项目与eclipse很不同,于是思想被固化了后(用eclipse久了),折腾这个走弯路好多条.首先settings下配的Application Server是配置本机tomca ...
- 从psd文件到html
纲要 计划布局,划分整体结构 内容区域,从整体到局部,局部中的通用部分,根据上下文应用样式 公共头部(public-header).尾部(public-footer) 公共容器(public-cont ...
- mfc自动创建按钮消息处理并清除
以前参加一次面试有这道题,当时没有网络没有做出来,今天在网上整理了一下,实现如下. .h中增加下面代码 //生成的消息映射函数 virtual BOOL OnInitDialo ...
- ListView下拉刷新和PullToRefreshListView实现
下拉刷新------- 1.addHeaderView必须在setAdapter之前调用 2.将paddingTop设置一个headerView高度的负值去隐藏它 getHe ...