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 本来考虑缩点什么的,后来发现不用. 只要记录 ...
随机推荐
- Unity 内置Shader变量、辅助函数等
一:标准库里的常用.cginc文件 HLSLSupport.cginc - (automatically included) Helper macros and definitions for cro ...
- rest_framework-版本-总结完结篇
总urls.py from django.conf.urls import url, include urlpatterns = [ url(r'^api/', include('api.urls') ...
- BZOJ 3083 树链剖分+倍增+线段树
思路: 先随便选个点 链剖+线段树 1操作 就直接改root变量的值 2操作 线段树上改 3操作 分成三种情况 1.new root = xx 整个子树的min就是ans 2. lca(new roo ...
- 请教如何用 peewee 实现类似 django ORM 的这种查询效果。
本人新入坑的小白,如有不对的地方请包涵~~~! 在 django 中代码如下:模型定义: class Friends(models.Model): first_id = models.IntegerF ...
- mac终端(terminal)里的快捷键
Command + K 清屏 Command + T 新建标签 Command +W 关闭当前标签页 Command + S 保存终端输出 Command + D 垂直分隔当前标签页 Command ...
- Intel投入5亿美元提升14nm工艺CPU需求
虽然14nm行将收尾,但是却有大量的客户在赶“末班车”,导致CPU供货告急. Intel年初宣布增加10亿美元的额外资本支出用于转向更新的.更先进的生产工具,以便增加产能,在本周的第39届纳斯达克投资 ...
- java解析json文件(省,市,区)
[{"code":"11","name":"北京市"},{"code":"12" ...
- 安装虚拟机(VM)(一)
原创作品,允许转载,转载时请务必声明作者信息和本声明. https://www.cnblogs.com/zhu520/p/10728248.html 本人小白,有错指出.谢谢! 一:安装虚拟机前奏 ...
- 题解 P1531 【I Hate It】
这道题明明是裸的线段树,蒟蒻却80分了五六次... ------------ 根据题意,显然是维护一棵单点修改区间查询的线段树,于是直接套区间修改的代码... 结构体,即为树上的节点. struct ...
- Servlet深入学习,规范,理解和实现(中)——深入理解Tomcat(一)
心得:在写这篇博客之前.我大致阅读一些关于Tomcat的书籍和博客等资料.有些资料由于时间的关系,解说的Tomcat版本号太老.有些资料能够非常好的说明Tomcat整理结构和设计思想可是非常多重要的问 ...