[NOIP2009][spfa]最优贸易
2015-07-08 22:10
316 查看
都7月份了,我连联赛题都想不出我真是可以滚粗了!
这道题就是对1一个正向spfa记录下到i时能买到的最小价格xiao[i],对n一个反向spfa,
记录下到i时能卖出的最小价格da[i],然后枚举1到n号节点寻找最大的差值。
这道题就是对1一个正向spfa记录下到i时能买到的最小价格xiao[i],对n一个反向spfa,
记录下到i时能卖出的最小价格da[i],然后枚举1到n号节点寻找最大的差值。
[code]#include<cstdio> #include<cstring> #include<vector> #define maxl 100001 using namespace std; int n,m,ans=0; int w[maxl],xiao[maxl],da[maxl]; vector <int> e1[maxl],e2[maxl]; int a[maxl*10]; bool exist[maxl]; void prework() { int x,y,z; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(z==1) { e1[x].push_back(y); e2[y].push_back(x); } else { e1[x].push_back(y); e1[y].push_back(x); e2[x].push_back(y); e2[y].push_back(x); } } } void spfa1() { int head=0,tail=1,u,v; a[1]=1;exist[1]=true; xiao[1]=w[1]; for(int i=2;i<=n;i++) xiao[i]=2000000000; while(head<tail) { head++; u=a[head];exist[u]=false; int l=e1[u].size(); for(int i=0;i<l;i++) { v=e1[u][i]; if(xiao[v]>xiao[u] || xiao[v]>w[v]) { xiao[v]=xiao[u]; if(xiao[v]>w[v]) xiao[v]=w[v]; if(!exist[v]) { a[++tail]=v; exist[v]=true; } } } } } void spfa2() { int head=0,tail=1,u,v; a[1]=n;exist =true; da =w ; for(int i=1;i<=n-1;i++) da[i]=0; while(head<tail) { head++; u=a[head],exist[u]=false; int l=e2[u].size(); for(int i=0;i<l;i++) { v=e2[u][i]; if(da[v]<da[u] || da[v]<w[v]) { da[v]=da[u]; if(da[v]<w[v]) da[v]=w[v]; if(!exist[v]) { a[++tail]=v; exist[v]=true; } } } } } void mainwork() { spfa1(); spfa2(); for(int i=1;i<=n;i++) if((da[i]-xiao[i])>ans) ans=da[i]-xiao[i]; } void print() { printf("%d",ans); } int main() { prework(); mainwork(); print(); return 0; }
相关文章推荐
- StormDRPC 概念以及简单例子测试
- JavaScript之包装对象
- java 内存区域与内存溢出异常
- vim 使用技巧
- StormDRPC 概念以及简单例子测试 分类: hadoop 2015-07-08 22:10 92人阅读 评论(0) 收藏
- RelativeLayout 显示、隐藏、移除
- 【Cocos2d-x】3.6 Android环境搭建
- Tomcat配置(备忘)
- 多线程代码
- 关于Git的那些事
- Android 方向传感器与磁力计和加速度传感器之间的关系
- iOS 中函数和方法的区别
- HDU 1796 How many integers can you find (容斥原理)
- jvm对象创建以及类的加载
- u-boot链接分析
- Section 1.2.3 水模拟
- 简单ORM工具的设计和编写,自己项目中曾经用过的
- 一切皆文件
- libjpeg学习4:libjpeg-turbo之YUV
- Add Two Numbers