poj 1364(差分约束-bellmanford)
来源:互联网 发布:coc所有兵种升级数据 编辑:程序博客网 时间:2024/05/17 04:32
差分约束:如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。
求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。
观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v]。因此,以每个变量xi为结点,对于约束条件xj-xi<=bk,连接一条边(i,j),边权为bk。我们再增加一个源点s,s与所有定点相连,边权均为0。对这个图,以s为源点运行Bellman-ford算法(或SPFA算法),最终{d[ i]}即为一组可行解。
解题思路:
1 2 gt 0
a1+a2+a3>0
2 2 lt 2
a2+a3+a4<2
a1+a2+a3>0
2 2 lt 2
a2+a3+a4<2
首先设Si=a1+a2+a3+...+ai
那么根据样例可以得出
S3-S0>0---->S0-S3<=-1
S4-S1<2---->S4-S1<=1
那么根据差分约束建图,加入这些有向边
gt: <a+b,a-1>=-ki-1
lt: <a-1,a+b>=ki-1
再根据bellman_ford判断是否有无负环即可
若出现负环了则这个序列不满足所有的不等式
源码:
#include <iostream>#include <memory.h>using namespace std;typedef struct{ int s,t,w;}Edge;Edge edge[110];int n,m;bool bellman_ford(){ int dist[110]; memset(dist,0,sizeof(dist)); for(int i=1;i<=n;i++) for(int j=0;j<m;j++) if(dist[edge[j].s]+edge[j].w<dist[edge[j].t]) dist[edge[j].t] = dist[edge[j].s]+edge[j].w; for(int j=0;j<m;j++) if(dist[edge[j].s]+edge[j].w<dist[edge[j].t]) return 0; return 1;}int main(){ int a,b,c; char s[3]; while(cin>>n) { if(!n) break; cin>>m; for(int i=0;i<m;i++) { cin>>a>>b>>s>>c; if(s[0]=='g') { edge[i].s=b+a; edge[i].t=a-1; edge[i].w=-c-1; } else { edge[i].s=a-1; edge[i].t=b+a; edge[i].w=c-1; } } if(!bellman_ford()) cout<<"successful conspiracy"<<endl; else cout<<"lamentable kingdom"<<endl; } return 0;}
- poj 1364(差分约束-bellmanford)
- POJ 1364 King(差分约束系统+bellmanford)
- poj 3169 BellmanFord—差分约束
- UVA11478-Halum(BellmanFord + 差分约束)
- POJ 1761 Integer Intervals(差分约束系统+BellmanFord)
- POJ 3169 Layout(差分约束系统+BellmanFord)
- POJ 1364 King (差分约束)
- poj 1364 King(差分约束)
- POJ 1364 King(差分约束)
- POJ 1364 King (差分约束)
- POJ 1364 King (差分约束)
- POJ 1364 差分约束
- POJ 1364 差分约束
- POJ 1364 差分约束
- poj 1364差分约束
- POJ 1364 差分约束
- POJ 1364 差分约束
- POJ 1364 差分约束
- Idea6410的uboot移植norflash启动小结
- KVM虚机同步
- Linux名字解释
- VisualSVN跨版本库迁移目录(保留日志)
- Unity3D 处理Label的颜色代码
- poj 1364(差分约束-bellmanford)
- 系统的版本号这么来获取
- JAVA实现本月国际国内节日
- POJ 2151 Check the difficulty of problems
- Ubuntu Server(64位) 安装Openoffice4,SWFTools 完成在线文档预览
- 队列的链式存储及其基本运算
- linux中IO调度算法小结
- jquery.validate 自定义验证方法
- .NET面试题再续