标签:
http://poj.org/problem?id=3159
题意:一个班有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; } int q[30000+10]; int tot=0; bool inq[30000+10]; memset(inq,0,sizeof(inq)); q[tot++]=1; while(tot) { int x=q[--tot]; 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); q[tot++]=node[e].v; } } } } printf("%d\n",d[n]); } return 0; }
#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[n]); } return 0; }
poj 3159 candies (差分约束 spfa+stack)
标签:
原文地址:http://www.cnblogs.com/sola1994/p/4236428.html