POJ 3159 Candies(差分约束)
2013-02-21 14:09
543 查看
题目链接
差分约束,一般求最大差值的时候 求的是最短路,求最小差值的时候求的是最长路。
题意:给出a,b,c,必须满足第b个人比第a个人至多c,b - a <= c,然后简单来说,就是求n-1的最大差值。
开始套的模版WA了,然后发现DISCUSS说,queue会超时,很奇怪,然后我用栈写,依旧WA了,不科学啊。。找了份也用spfa写的代码,发现INF开的有点大了。。。导致WA了。。。
差分约束,一般求最大差值的时候 求的是最短路,求最小差值的时候求的是最长路。
题意:给出a,b,c,必须满足第b个人比第a个人至多c,b - a <= c,然后简单来说,就是求n-1的最大差值。
开始套的模版WA了,然后发现DISCUSS说,queue会超时,很奇怪,然后我用栈写,依旧WA了,不科学啊。。找了份也用spfa写的代码,发现INF开的有点大了。。。导致WA了。。。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <queue> using namespace std; #define N 30001 #define M 150001 #define INF 10000000 int first ,in ,d ; struct node { int u,v,next,w; }edge[M]; int stack[10000001]; int t,n; void add(int u,int v,int w) { edge[t].u = u; edge[t].v = v; edge[t].w = w; edge[t].next = first[u]; first[u] = t; t ++; } void CL() { t = 1; memset(first,-1,sizeof(first)); } void spfa(int str) { int i,u,v,top; for(i = 1;i <= n;i ++) { d[i] = INF; in[i] = 0; } top = 1; stack[top] = str; in[str] = 1; d[str] = 0; while(top >= 1) { u = stack[top]; top --; in[u] = 1; for(i = first[u];i != -1;i = edge[i].next) { v = edge[i].v; if(d[v] > d[u] + edge[i].w) { d[v] = d[u] + edge[i].w; if(!in[v]) { top ++; stack[top] = v; in[v] = 1; } } } } } int main() { int m,x,y,c,i; scanf("%d%d",&n,&m); CL(); for(i = 1;i <= m;i ++) { scanf("%d%d%d",&x,&y,&c); add(x,y,c); } spfa(1); printf("%d\n",d ); return 0; }
相关文章推荐
- POJ-3159 Candies(差分约束)
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
- poj 3159 Candies 差分约束
- POJ 3159 Candies 差分约束 spfa+栈+邻接表
- poj 3159 Candies(差分约束)
- poj 3159 Candies(差分约束 spfa stack实现)
- POJ-3159 Candies(差分约束)
- poj 3159 Candies(差分约束原理 最短路)
- POJ3159_Candies_差分约束_SPFA
- POJ 3159 Candies(差分约束 转spfa+stack 求最短路径)
- poj-3159 Candies(差分约束问题)
- POJ 3159 Candies (差分约束)
- POJ 3159 Candies(差分约束)
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
- POJ 3159 Candies(差分约束)
- POJ 3159 Candies(spfa最短路,差分约束)
- POJ 3159 Candies(差分约束+dijkstra+heap)
- POJ 3159 Candies(SPFA+栈)差分约束
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)