ZOJ2770(差分约束系统学习)
2013-08-10 23:05
369 查看
Sn代表前n个军营的总人数
3 2 1000 2000 1000 1 2 1100 2 3 1300 1.每个兵营实际人数不能超过其容量,得到下面不等式 S1 - S0 <= 1000 S2 - S1 <= 2000 S3 - S2 <= 1000 2.每个兵营的实际人数大于等于0,得到下面不等式 S0 - S1 <= 0 S1 - S2 <= 0 S2 - S3 <= 0 3.第i个大营到第j个大营的士兵总数至少有k个,得到下面不等式 S0 - S2 <= -1100 S1 - S3 <= -1300 4.第i个大营到第j个大营的士兵总数不超过这些兵营容量的和,得到下面不等式 S2 - S0 <= 3000 S3 - S1 <= 3000 最终要求 Sn - S0 >= M , 转化为 S0 - S3 <= -M 1.Bellman_Ford 版本
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> #include <algorithm> using namespace std; #define inf 9999999 #define N 1005 #define M 23005 int size,n,m; int dis ,vis ,head ,in ,sum ; struct Edge { int v,w,next; Edge(){} Edge(int V,int W,int NEXT):v(V),w(W),next(NEXT){} }edge[M]; void Init() { size = 0; memset(head,-1,sizeof(head)); sum[0] = 0; } void InsertEdge(int u,int v,int w) { edge[size] = Edge(v,w,head[u]); head[u] = size++; } bool spfa(int st) { for(int i=0; i<=n; i++) { vis[i] = 0; dis[i] = inf; in[i] = 0; } dis[st] = 0 ; vis[st] = 1; queue<int> Q; while(!Q.empty()) Q.pop(); Q.push(st); in[st] ++; while(!Q.empty()) { int u = Q.front(); Q.pop(); vis[u] = 0; for(int i=head[u]; i!=-1; i=edge[i].next) { int v = edge[i].v; if(dis[v] > dis[u] + edge[i].w) { dis[v] = dis[u] + edge[i].w; if(!vis[v]) { vis[v] = 1; in[v]++; if(in[v] > n) return 0; Q.push(v); } } } } return 1; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { Init(); int u,v,w; for(int i=1; i<=n; i++) { scanf("%d",&w); InsertEdge(i-1,i,w); InsertEdge(i,i-1,0); sum[i] = sum[i-1] + w; } for(int i=0; i<m; i++) { scanf("%d%d%d",&u,&v,&w); InsertEdge(v,u-1,-w); InsertEdge(u-1,v,sum[v]-sum[u-1]); } if(!spfa(n)) printf("Bad Estimations\n"); else printf("%d\n",-dis[0]); } return 0; }View Code
相关文章推荐
- zoj 2770 Burn the Linked Camp 差分约束系统
- BellmanFord单源最短路径路径算法差分约束系统ZOJ–2770
- zoj2770 差分约束系统
- Burn the Linked Camp ZOJ 2770 差分约束系统 SPFA
- zoj 2770 Burn the Linked Camp 差分约束系统
- zoj 2770 Burn the Linked Camp 差分约束系统
- ZOJ 2770 Burn the Linked Camp 差分约束系统
- zoj 2770 Burn the Linked Camp (差分约束系统)
- zoj2770,差分约束系统
- zoj 2770 Burn the Linked Camp 差分约束系统
- ZOJ 1508 Intervals (差分约束系统)
- ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)
- ZOJ 2770 Burn the Linked Camp( 差分约束啊 )
- ZOJ 2770 Burn the Linked Camp 差分约束
- ZOJ 2770 Burn the Linked Camp【差分约束 SPFA】
- zoj 2770
- 关于有容量下界的网络可行流问题解决的学习笔记 ZOJ 2314 ZOJ 3229 HDU 3157
- ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)
- poj 1201/zoj 1508 intervals 差分约束系统
- 差分约束系统学习