poj-3159,SPFA+堆栈
来源:互联网 发布:云计算 中国科学院 编辑:程序博客网 时间:2024/05/29 11:06
题目连接
分析:本题是通过最短路径来求差分约束问题。关于差分约束问题,为什么可以用最短路来求解。可以到网上找。
求最短路径,这题因为点比较多,所以用spfa写方便些。不过用列队会溢出,用循环列队会超时,所以这题可以用栈来实现。即节省空间,又可省时间。
代码:(弱弱地参考别人代码)
#include<cstdio>#include<cstring>#include<stack>#define INF 1000000using namespace std; struct node{int x,w,next;}edge[150005];bool visit[30005];int d[30005],head[30005];int N,M;void spfa(){int i,k;stack<int>S;memset(visit,0,sizeof(visit));for(i=2;i<=N;i++) d[i]=INF; d[1]=0;S.push(1),visit[1]=1;while(!S.empty()){k=S.top();S.pop();visit[k]=0; for(i=head[k];i!=-1;i=edge[i].next){if(d[edge[i].x]>edge[i].w+d[k]){d[edge[i].x]=edge[i].w+d[k];if(!visit[edge[i].x]){S.push(edge[i].x);visit[edge[i].x]=1;}} }}printf("%d\n",d[N]);}int main() {int x,w,v,i; while(scanf("%d%d",&N,&M)!=EOF){memset(head,-1,sizeof(head));for(i=1;i<=M;i++){ scanf("%d%d%d",&x,&w,&v); edge[i].x=w; edge[i].w=v; edge[i].next=head[x]; head[x]=i;}spfa(); } return 0;}
- poj-3159,SPFA+堆栈
- poj 3159 Candies(查分约束+堆栈优化的spfa最短路模板)
- poj 3159 分糖果 第一次差分约束+ 用堆栈实现spfa(更快)
- poj 3159 SPFA+手写栈
- poj 3159 -- Candies ( spfa + 栈 )
- poj 3159 Candies------spfa算法
- POJ 3159 Candies(SPFA+stack)
- poj 3159 Candies (spfa+stack)
- POJ 3159(spfa + 数组模拟)
- SPFA的堆栈实现
- POJ 3159 Candies 差分约束+spfa
- poj 3159 Candies 差分约束 + spfa
- 关于SPFA,记一点小悲催 poj 3159
- POJ 3159 SPFA最短路径
- POJ-3159-Candies(SPFA+模拟栈)
- poj 3159(spfa最短路径)
- POJ 3159Candies 栈模拟SPFA
- SPFA+Stack||Dijkstra+Heap-POJ-3159-Candies
- javascript各进制数据与十进制之间的转换
- 游戏服务器引擎开发笔记之三——游戏服务器引擎和逻辑的功能的相互调用(二)
- 基本文件IO的实现
- 第十三周项目四——Date类,Time类,多继承的DateTime类
- svn在windows下的搭建
- poj-3159,SPFA+堆栈
- WP8调用WebService或WCF时遇到的问题及解决方案
- metasploit针对性钓鱼攻击向量(BT5R1失败)
- Windows Phone(WP)从此开始!
- GWT 实现文件上传和下载
- USTCACM1385 最小公倍数
- inux文件压缩包管理-tar
- hdu 1524 A Chess Game
- Java论坛汇总