poj 1201 Intervals
2012-08-30 14:32
302 查看
差分约束系统,对每个约束,则有dis[t]-dis[s]>=c。另外还有一个隐含的约束条件就是0<=dis[i]-dis[i-1]<=1,根据这两个条件来建图,用bellmen_ford和spfa都可以,前者要适当加以剪枝。 #include<stdio.h> #include<algorithm> using namespace std; #define MAXINT 1000000 struct EDGE{ int st,ed,val; }edge[60000]; int dis[60000],n,mi,ma; int MAX[60000]; int bellman_ford() { int i , k; for(i = mi; i <= ma ; i++ ) dis[i] = -MAXINT ; dis[mi] = 0 ; bool over; for(k = 0 ; k <= ma - mi; k ++ ) { over = true ; for(i = 0 ; i < n ; i ++ ) if(dis[edge[i].st] != -MAXINT && dis[edge[i].st] + edge[i].val > dis[edge[i].ed] ) { dis[edge[i].ed] = dis[edge[i].st] + edge[i].val ; over = false; } for(i=mi;i<ma;i++) if( dis[i] != -MAXINT && dis[i] > dis[i+1] ) { dis[i+1] = dis[i] ; over = false ; } for(i = ma; i > mi ; i --) if(dis[i] != -MAXINT && dis[i]-1 > dis[i-1]) { dis[i-1] = dis[i]-1 ; over = false ; } if(over) break; } return dis[ma]; } int main() { int i; while(scanf("%d",&n)!=EOF) { mi=MAXINT; ma=0; for(i=ma;i<n;i++) { scanf("%d%d%d",&edge[i].st,&edge[i].ed,&edge[i].val); /// 1<= ci <= bi - ai + 1 edge[i].ed++; if( edge[i].ed > ma) ma = edge[i].ed ; if( edge[i].st < mi ) mi = edge[i].st; } printf("%d\n",bellman_ford()); } return 0; }
相关文章推荐
- poj 1201 intervals 我的第一个差分约束
- poj 1201 Intervals
- POJ 1201-Intervals(差分约束系统)
- Poj 1201 Intervals(差分约束)
- poj 1201 Intervals(差分约束求最长路)
- poj1201 Intervals
- poj 1201 Intervals [差分约束]
- poj 1201 intervals 我的第一个差分约束
- poj 1201 Intervals
- POJ 1201 Intervals 差分约束
- POJ 1201 Intervals 差分约束系统
- poj 1201 Intervals(第一道差分约束题)
- POJ 1201 && HDU 1384 Intervals(差动制动系统)
- 差分约束系统_bellman_ford_poj 1201 Intervals
- POJ 1201 Intervals(差分约束系统)
- POJ 1201 Intervals
- 【38.24%】【POJ 1201】Intervals
- poj 1201 Intervals(差分约束)
- POJ 1201 Intervals
- POJ 1201 Intervals