poj 3159 差分约束(分发糖果)
2014-07-16 11:30
288 查看
题意:flymouse是班长,由他来发糖果。flymouse希望自己的糖果数尽量多于snoopy。其他人必须使得自己的糖果不少于某某,给出m个这种约束关系(u,v, w):即u的糖果数不能比v的糖果数少w。问flymouse最多比snoopy多几个糖果。
思路:差分约束SPFA。必须用栈
思路:差分约束SPFA。必须用栈
#include <stdio.h> #include <string.h> #define N 30005 #define M 150005 #define INF 0x3fffffff struct edge{ int y,w,next; }e[M]; int first ,dis ,visited ; int stack ; int n,m,top,tops; void init(){ int i; top = 0; tops = -1; memset(first,-1,sizeof(first)); memset(visited,0,sizeof(visited)); for(i = 1;i<=n;i++) dis[i] = INF; } void add(int x,int y,int w){ e[top].y = y; e[top].w = w; e[top].next = first[x]; first[x] = top++; } int relax(int x,int y,int w){ if(dis[x]+w < dis[y]){ dis[y] = dis[x]+w; return 1; } return 0; } int spfa(int s,int t){ int i,j; visited[s] = 1; dis[s] = 0; stack[++tops] = s; while(tops > -1){ int now = stack[tops--]; visited[now] = 0; for(i = first[now];i!=-1;i=e[i].next){ j = e[i].y; if(relax(now,j,e[i].w) && !visited[j]){//这地方把now写成了i,故wa了若干次 stack[++tops] = j; visited[j] = 1; } } } return dis[t]; } int main(){ freopen("a.txt","r",stdin); while(scanf("%d %d",&n,&m)!=EOF){ int a,b,w; init(); while(m--){ scanf("%d %d %d",&a,&b,&w); add(a,b,w); } printf("%d\n",spfa(1,n)); } return 0; }
相关文章推荐
- poj 3159 Candies 【简单差分约束】 【SPFA + 数组模拟栈】
- POJ 3159 Candies(差分约束)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ训练计划3159_Candies(差分约束)
- POJ - 3159 Candies (变形的最短路问题)差分约束,栈版本SPFA,前向星建图
- poj 3159 Candies(差分约束)
- poj 3159 Candies(差分约束 spfa stack实现)
- POJ 3159 Candies(差分约束)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ 题目3159 Candies(差分约束)
- POJ-3159 Candies(差分约束)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- poj 3159(差分约束经典题)
- POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- poj 3159 Candies(差分约束)
- POJ 3159 差分约束
- poj 3159 Candies 差分约束
- 关于差分约束的一些总结和题解。(poj 1364 ,3159, 2983, 3169 ,1201 ,1716 ,1275)
- poj 3159 差分约束 + SPFA + 栈