POJ-3159 Candies(差分约束)
2017-03-30 19:26
513 查看
POJ-3159
n个点,每个点有权值p[i],给出一些条件:即p[j] - p[i] <= k,k >= 0。要求在满足这些条件的情况下,求出p
- p[1]的最大值。
观察最短路的性质, dist[i]<=dist[j]+wt[j,i]与p[j]<=p[i]+k 形式很相似
dist[i]=min{dist[j]+wt[j,i]}
p[i]=min{p[j]+k}这样使p[i]紧靠约束,即p[i]等于满足条件的最大解
所以可转移至最短路模型,对p[j]<=p[i]+k ,连1条 i->j 权为k的边,最后求1->n的最短路
PS:
如果求最小差,可以求n->1的最短路,最后取负即可
n个点,每个点有权值p[i],给出一些条件:即p[j] - p[i] <= k,k >= 0。要求在满足这些条件的情况下,求出p
- p[1]的最大值。
观察最短路的性质, dist[i]<=dist[j]+wt[j,i]与p[j]<=p[i]+k 形式很相似
dist[i]=min{dist[j]+wt[j,i]}
p[i]=min{p[j]+k}这样使p[i]紧靠约束,即p[i]等于满足条件的最大解
所以可转移至最短路模型,对p[j]<=p[i]+k ,连1条 i->j 权为k的边,最后求1->n的最短路
PS:
如果求最小差,可以求n->1的最短路,最后取负即可
//差分约束系统 卡spfa队列 spfa栈可过 #include <cstdio> #include <algorithm> #include <queue> #include <cstring> #include <stack> using namespace std; const int MAXN=33333; const int MAXM=155555; const int INF=0x3f3f3f3f; int head[MAXN],to[MAXM<<1],ne[MAXM<<1],wt[MAXM<<1],n,m,dist[MAXN],ecnt; void init() { ecnt=0; memset(head,0,sizeof(head)); } void addedge(int a,int b,int c) { ne[++ecnt]=head[a]; head[a]=ecnt; to[ecnt]=b; wt[ecnt]=c; } stack<int> st; int vis[MAXN],inq[MAXN]; int spfa(int s,int t)//s为源点,t为终点 { while(!st.empty()) st.pop(); for(int i=1;i<=n;i++) dist[i]=INF,vis[i]=0,inq[i]=0; dist[s]=0; st.push(s); inq[s]=1; while(!st.empty()) { int fr=st.top(); st.pop(); inq[fr]=0; for(int k=head[fr];k;k=ne[k]) { int v=to[k]; if(v==s) continue; if(dist[v]>dist[fr]+wt[k]) { dist[v]=dist[fr]+wt[k]; if(inq[v]) continue; if(++vis[v]>=n)//有负环 return -1; st.push(v); inq[v]=1; } } } return dist[t]; } int main() { scanf("%d%d",&n,&m); int ta,tb,tc; for(int i=0;i<m;i++) { scanf("%d%d%d",&ta,&tb,&tc); addedge(ta,tb,tc); } printf("%d\n",spfa(1,n)); return 0; }
相关文章推荐
- POJ 3159 Candies(差分约束)
- POJ 3159 Candies(差分约束+dijkstra+heap)
- POJ-3159 Candies( 差分约束 )
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- poj 3159 Candies 差分约束 + spfa
- POJ 题目3159 Candies(差分约束)
- POJ-3159 Candies(差分约束)
- poj 3159 Candies 差分约束
- POJ 3159 Candies 还是差分约束(栈的SPFA)
- POJ 3159 Candies(差分约束)
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)
- poj 3159 candies (差分约束 spfa+stack)
- poj 3159 Candies 差分约束
- poj 3159 Candies(差分约束)
- POJ 3159 Candies 差分约束 spfa+栈+邻接表
- POJ 3159 Candies(差分约束,最短路)
- poj 3159 Candies(差分约束 spfa stack实现)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)