POJ 3159 Candies 还是差分约束(栈的SPFA)
来源:互联网 发布:幼儿园课件制作软件 编辑:程序博客网 时间:2024/06/10 00:23
http://poj.org/problem?id=3159
题目大意:
n个小朋友分糖果,你要满足他们的要求(a b x 意思为b不能超过a x个糖果)并且编号1和n的糖果差距要最大。
思路:
嗯,我先揭发一下,1号是分糖果的孩子,班长大人!(公报私仇啊。。。,欺负N号的小朋友~ 好吧,我开玩笑的)
嗯,这题要求最短路径。为啥是最短?你以前都在玩最长呀~
因为这题要求的是最大的。图的三角不等式有:d[v]- d[u]<=w(u,v); d[v]<=d[u]+w(u,v); 即而松弛的条件为: if(d[v]>d[u]+w(u,v)) d[v]=d[u]+w(u,v); 通过不断的松弛,使得d的值不断变小,直到满足所有条件,也就是说满足条件的时候就是最大的了~
建立图,b - a <=x 然后就是spfa了,不过这题竟然卡队列了。。看discuss人家用stack,然后我也改了,就这样过了。。。。。。
还有这题不能建立超级源点。
设第i个小孩子分到的糖果为s[i],那么 有s[i]>=0
而上面的是b-a<=x,由于这题求的是最短路径,所以要改为小于号也就是 -s[i]<=0,然后如果添加一个点比如说0那么就是应该从i到0了,那么就无用了。。。。
#include<cstdio>#include<cstring>#include<stack>using namespace std;const int MAXN=30000+10;const int MAXM=350000;const int INF=-999999;int n,m,head[MAXN],len,dis[MAXN];bool vis[MAXN];struct edge{int to,val,next;}e[MAXM];void add(int from,int to,int val){e[len].to=to;e[len].val=val;e[len].next=head[from];head[from]=len++;}void spfa(){int s=1;stack<int> q;q.push(s);vis[s]=true;dis[s]=0;while(!q.empty()){int cur=q.top();q.pop();vis[cur]=false;for(int i=head[cur];i!=-1;i=e[i].next){int id=e[i].to;if(dis[id] > dis[cur] + e[i].val){dis[id]=dis[cur]+e[i].val;if(!vis[id]){q.push(id);vis[id]=true;}}}}}int main(){while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++){head[i]=-1;dis[i]=-INF;vis[i]=false;}len=0;for(int i=0;i<m;i++){int from,to,val;scanf("%d%d%d",&from,&to,&val);add(from,to,val);}spfa();printf("%d\n",dis[n]);}return 0;}
2 0
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- POJ 3159 Candies(SPFA+栈)差分约束
- POJ 3159 Candies 差分约束+spfa
- poj 3159 Candies 差分约束 + spfa
- POJ 3159 Candies【差分约束+SPFA】
- poj Candies(差分约束,spfa栈)
- POJ 3159 Candies 差分约束 spfa+栈+邻接表
- POJ 3159 Candies 差分约束-SPFA栈实现
- poj 3159 Candies(差分约束 spfa stack实现)
- POJ 3159 Candies(spfa最短路,差分约束)
- POJ 3159 Candies(差分约束+SPFA )
- 【poj 3159】Candies 差分约束+spfa(stack)
- 【POJ 3159】Candies(差分约束+SPFA)
- POJ3159 Candies(差分约束+SPFA的栈实现)
- POJ 3159 Candies 差分约束系统(这题卡SPFA的队列的双端队列)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- Candies+差分约束+spfa+poj
- poj 3259 Candies spfa 差分约束
- Windows(x64)编译FFMPEG-2.0.1
- 第四章 网络层 4.2网际协议IP
- 学习笔记6
- jsp页面的js的书写规范
- RHEL 6.3安装(超级详细图解教程)
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- Atomikos 不断出现警告信息
- hive学习笔记之-数据操作
- [译] 基于Hadoop的视频流服务(Using Hadoop for Video Streaming)
- signal函数的复杂声明
- 交换两个实数至少需要三步,这个命题对不对,该怎么证明
- 【学习笔记之ios开发】1.Object-C语法概述
- [linux系统编程]网络编程 服务器多路复用
- vm_ubuntu12.04_ard4.2