poj 1364 SPFA+差分约束
来源:互联网 发布:软件研发总监招聘 编辑:程序博客网 时间:2024/04/28 09:36
约束条件:
如果是gt s[a-1]-s[a+b]<=-c-1;
如果是lt s[a+b]-s[a-1]<=c-1;
此外,新加的原点与其他点的leth为零。n+1为原点。
#include<stdio.h>#include<string.h>#define MX 10000000int n,m,dist[110],vst[110],list[110],f[1000000];char ss[5];bool visit[110];struct point{int v,leth;int next;}eg[1000010];int SPFA(){memset(vst,0,sizeof(vst));memset(visit,0,sizeof(visit));for(int i=0;i<=n;i++)dist[i]=MX;dist[n+1]=0;int head=0,tail=1;f[1]=n+1;vst[n+1]++;visit[n+1]=true;while(head<tail){int now=f[++head];visit[now]=false;for(int i=list[now];i!=-1;i=eg[i].next){if(dist[now]+eg[i].leth<dist[eg[i].v]){dist[eg[i].v]=dist[now]+eg[i].leth;if(!visit[eg[i].v]){f[++tail]=eg[i].v;vst[eg[i].v]++;visit[eg[i].v]=true;}if(vst[eg[i].v]>n)return -1;}}}return 1;}int main(){while(scanf("%d%d",&n,&m)&&n){int pos=0;memset(list,-1,sizeof(list));for(int i=1;i<=n;i++){eg[pos].v=i;eg[pos].leth=0;eg[pos].next=list[n+1];list[n+1]=pos++;}for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%s%d",&a,&b,ss,&c);if(ss[0]=='g'){eg[pos].leth=-c-1;eg[pos].v=a-1;eg[pos].next=list[a+b];list[a+b]=pos++;}else{eg[pos].leth=c-1;eg[pos].v=a+b;eg[pos].next=list[a-1];list[a-1]=pos++;}}if(SPFA()==1)printf("lamentable kingdom\n");elseprintf("successful conspiracy\n");}return 0;}
- POJ 1364 King 差分约束 SPFA
- poj 1364 SPFA+差分约束
- POJ 1364 (差分约束+spfa)
- poj-1364-King-差分约束+spfa超级源点
- poj 1364—— King(差分约束,spfa)
- POJ 1364 King(差分约束-Spfa)
- POJ 1364 King【差分约束+SPFA/Bellman-Ford】
- poj 1364 差分约束 SPFA(栈/队列)
- poj 1364(差分约束+spfa判断负环)
- 【POJ 1364】King(差分约束+SPFA)
- POJ 1364 King 差分约束系统 SPFA
- poj 1364 King (差分约束 spfa)
- POJ 1201 Intervals 差分约束+spfa
- POJ 3159 Candies 差分约束+spfa
- poj 3159 Candies 差分约束 + spfa
- poj 1201 Intervals 差分约束 + spfa
- poj 3169 差分约束 + spfa
- POJ 2983 SPFA 差分约束
- pku 1099
- java中的数学计算函数
- jbpm教程(三) 将公文提交到第一个环节
- KMP算法代码&BF算法代码
- Java内部类总结
- poj 1364 SPFA+差分约束
- jbpm教程(四) 查看公文所处节点
- openstack nova基础知识——libvirt和qemu(2)
- sed命令详解
- ABAP选择屏幕两个下拉列表的联动
- linux内存清理和释放命令
- jbpm教程(五)查询某用户手上有多少公文
- VC6.0 SetWindowPos
- 删除重复记录(Oracle)