poj 3159 candies (差分约束 spfa+stack)
2015-01-20 16:23
435 查看
http://poj.org/problem?id=3159
题意:一个班有n个人 每人分到若干糖果 且u的糖果数不能比v少w个 求第1个人与第n个人最大数量差
照着模板spfa+queue果断tle了
之后照着题解说的把queue改成stack就过了 但是还不明白为什么会快
而且如果用数组直接模拟会比stl更快
View Code
题意:一个班有n个人 每人分到若干糖果 且u的糖果数不能比v少w个 求第1个人与第n个人最大数量差
照着模板spfa+queue果断tle了
之后照着题解说的把queue改成stack就过了 但是还不明白为什么会快
而且如果用数组直接模拟会比stl更快
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<stack> #define INF 10000000 using namespace std; int n,m; int d[30000+10]; struct Node { int u,v,w; }; Node node[150000+20]; int first[30000+20]; int next [150000+20]; int main() { int i,j,k; int u,v,w; while(scanf("%d%d",&n,&m)!=EOF) { //memset(mat,0,sizeof(mat)); for(i=2;i<=n;i++) d[i]=INF; d[1]=0; for(int i=1;i<=n;i++) first[i]=-1; for(i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); //u+w>=v node[i].u=u; node[i].v=v; node[i].w=w; next[i]=first[u]; first[u]=i; } stack<int> q; bool inq[30000+10]; memset(inq,0,sizeof(inq)); q.push(1); while(!q.empty()) { int x=q.top(); q.pop(); inq[x]=false; for(int e=first[x];e!=-1;e=next[e]) { if(d[node[e].v]>d[x]+node[e].w) { d[node[e].v]=d[x]+node[e].w; if(!inq[node[e].v]) { inq[node[e].v]=true; q.push(node[e].v); } } } } printf("%d\n",d ); } return 0; }
View Code
相关文章推荐
- poj 3159 Candies(差分约束,dij+heap,spfa+stack)
- POJ 3159 Candies(差分约束 转spfa+stack 求最短路径)
- POJ3159_Candies_差分约束_SPFA
- poj 3159 Candies 【简单差分约束】 【SPFA + 数组模拟栈】
- POJ 3159 Candies(spfa最短路,差分约束)
- poj 3159 Candies 差分约束 + spfa
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- POJ - 3159 Candies (变形的最短路问题)差分约束,栈版本SPFA,前向星建图
- POJ 3159 Candies 差分约束-SPFA栈实现
- POJ 3159 Candies (差分约束)
- POJ 3159 Candies 差分约束 spfa+栈+邻接表
- poj 3159 Candies(差分约束)
- POJ 3159 Candies(最短路 差分约束)
- POJ 3159 Candies(差分约束)
- POJ 3159 Candies [差分约束系统 SPFA+STACK]
- poj 3159 差分约束 + SPFA + 栈
- POJ 3159 Candies(差分约束+dijkstra+heap)
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
- poj 3159 Candies 差分约束