NOIP2009 最优贸易(BFS)
本题正解是tarjan。我没有去写
之前的代码是错误的不好意思,因为数据太弱一直没有发现。
相同还是两遍bfs,一次正向,一次反向。在正向的时候我们求出从起点走到各个点的最小值。在反向的时候求出从终点走向起点的最大值。
这样一来,便能够知道对于每个点i。在1到n的路径上面,经过的最大值是多少。经过的最小值是多少。最后max(mx[i]-mp[i])就是要求的答案。
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#define MAXN 100005
using namespace std;
struct T
{
int v;
int next;
}edge[500005],edge2[500005];
int cnt,cnt2;
int head[MAXN],head2[MAXN];
void add_edge(int u,int v)
{
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
void add_edge2(int u,int v)
{
edge2[cnt2].v = v;
edge2[cnt2].next = head2[u];
head2[u] = cnt2++;
}
int mx[MAXN],mp[MAXN],w[MAXN];
bool able[MAXN],vis[MAXN];
int n,m;
void bfs1()
{
memset(mp,0x3f,sizeof mp);
queue<int> myque;
myque.push(1);
vis[1] = 1;
while(!myque.empty())
{
int u = myque.front();
vis[u] = 0;
myque.pop();
mp[u] = min(mp[u],w[u]);
for(int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].v;
if(mp[v] > mp[u])
{
mp[v] = mp[u];
if(!vis[v])
{
vis[v] = 1;
myque.push(v);
}
}
}
}
}
void bfs2()
{
memset(mx,0,sizeof mx);
queue<int> myque;
myque.push(n);
able[n] = 1;
while(!myque.empty())
{
int u = myque.front();
able[u] = 0;
myque.pop();
mx[u] = max(mx[u],w[u]);
for(int i = head2[u]; i != -1; i = edge2[i].next)
{
int v = edge2[i].v;
if(mx[v] < mx[u])
{
mx[v] = mx[u];
if(!able[v])
{
able[v] = 1;
myque.push(v);
}
}
}
}
}
int main()
{
memset(head,-1,sizeof head);
memset(head2,-1,sizeof head2);
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++)
scanf("%d",&w[i]);
for(int i = 1; i <= m; i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y);
add_edge2(y,x);
if(z == 2)
{
add_edge(y,x);
add_edge2(x,y);
}
}
bfs2();//反向,找n到i路径上的最大值
bfs1();//正向,找1到i路径上的最小值
int ans = 0;
for(int i = 1; i <= n; i++)
ans = max(ans,mx[i]-mp[i]);
printf("%d\n",ans);
return 0;
}
/*4 3
10 10 1 10
1 2 1
2 4 1
3 2 1 */
NOIP2009 最优贸易(BFS)的更多相关文章
- [Luogu 1073] NOIP2009 最优贸易
[Luogu 1073] NOIP2009 最优贸易 分层图,跑最长路. 真不是我恋旧,是我写的 Dijkstra 求不出正确的最长路,我才铤而走险写 SPFA 的- #include <alg ...
- [NOIP2009]最优贸易(图论)
[NOIP2009]最优贸易 题目描述 CC 国有 \(n\) 个大城市和 \(m\) 条道路,每条道路连接这 \(n\) 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 \(m\ ...
- NOIP2009 最优贸易
3. 最优贸易 (trade.pas/c/cpp) [问题描述] C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间 多只有一条道路直接相连.这 m 条道 ...
- 【洛谷P1073】[NOIP2009]最优贸易
最优贸易 题目链接 看题解后感觉分层图好像非常NB巧妙 建三层n个点的图,每层图对应的边相连,权值为0 即从一个城市到另一个城市,不进行交易的收益为0 第一层的点连向第二层对应的点的边权为-w[i], ...
- [luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)
传送门 Description C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分 为 ...
- NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- noip2009最优贸易
试题描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- 洛谷1073 NOIP2009 最优贸易
题目大意 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- noip2009最优贸易(水晶球)
题目:http://codevs.cn/problem/1173/ https://www.luogu.org/problemnew/show/P1073 本来考虑缩点什么的,后来发现不用. 只要记录 ...
随机推荐
- angularjs 事件向上向下传播
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- 用DOM动态控制表格
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- hdu_1754,线段树单点更新,求区间最值
http://www.notonlysuccess.com/index.php/segment-tree-complete/ #include<iostream> #include< ...
- 虚拟主机TOMCAT配置
在tomcat中添加虚拟主机: 编辑"tomcat\conf\server.xml",在"<Engine></Engine>"元素中新加 ...
- 关于linq使用建议
1.由于目前我做的项目使用的是SocanCode工具生成的三层框架,于是乎对于一些基本数据类型采用了可空类型编程 public CountryCode(int? id, string en_name, ...
- [NOI2012]随机数生成器 矩阵乘法
Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...
- appium使用教程(三)-------------用例编写
1. 驱动 import os, time, unittest from appium import webdriver PATH = lambda p:os.path.abspath(os.path ...
- springMVC+request.session实现用户登录和访问权限控制
用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问.感谢谷歌资源,在这里做个学习记录加深自己的印象. 原文在我的https://my. ...
- android源代码编译完毕之后
android源代码编译完毕之后,在根文件夹下会有一个out文件夹生成,假设我们想要执行虚拟机的话,须要配置一下环境变量. 首先我们使用以下的命令打开配置环境变量的文件: gedit ~./bashr ...
- flash3D学习1
今天正式学习flash3D. 先配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0 ...