差分约束系统 # 差分约束系统

# 差分约束系统

 

差分约束系统


水题(bzoj 1731)

  • 裸差分约束,n头牛【1,n】,(ml条这样的信息)对于两头有好感的牛距离不超过w,(md条这样的信息)对于两头有反感的牛距离至少w,且多头牛可以共享一个点,求最后一头牛和第一头牛距离最大是多少

  • 按要求建图,使用bellman或者spfa
/*
4 2 1
1 3 10
2 4 20
2 3 3

Sample Output
27
四只牛分别在0,7,10,27.

*/
#include <bits/stdc++.h>
using namespace std; struct edge{ int from,cost,to; }e[100000]; int k=0; void build(int x,int y,int w){ //e[k].from=x,e[k].to=y,e[k].cost=w; e[k]=edge{x,w,y}; k++; } int d[1005]; int n; const int inf=0x7f7f7f7f; bool bellman(int s){ memset(d,0x7f,sizeof(d)); d[s]=0; bool update=0; for(int i=1;i<=n;i++){ update=0; for(int j=0;j<k;j++){ edge& es=e[j]; if(es.from!=inf&&d[es.from]+es.cost<d[es.to]){ d[es.to]=d[es.from]+es.cost; update=1; if(i==n)return 0; } } if(!update)return 1; } return 1; } int main(){ int ml,md; scanf("%d %d %d",&n,&ml,&md); int x,y,w; while(ml--){ scanf("%d %d %d",&x,&y,&w);//y-x<=w;建有向边x->y, build(x,y,w); } while(md--

差分约束系统


水题(bzoj 1731)

  • 裸差分约束,n头牛【1,n】,(ml条这样的信息)对于两头有好感的牛距离不超过w,(md条这样的信息)对于两头有反感的牛距离至少w,且多头牛可以共享一个点,求最后一头牛和第一头牛距离最大是多少

  • 按要求建图,使用bellman或者spfa
/*
4 2 1
1 3 10
2 4 20
2 3 3

Sample Output
27
四只牛分别在0,7,10,27.

*/
#include <bits/stdc++.h>
using namespace std; struct edge{ int from,cost,to; }e[100000]; int k=0; void build(int x,int y,int w){ //e[k].from=x,e[k].to=y,e[k].cost=w; e[k]=edge{x,w,y}; k++; } int d[1005]; int n; const int inf=0x7f7f7f7f; bool bellman(int s){ memset(d,0x7f,sizeof(d)); d[s]=0; bool update=0; for(int i=1;i<=n;i++){ update=0; for(int j=0;j<k;j++){ edge& es=e[j]; if(es.from!=inf&&d[es.from]+es.cost<d[es.to]){ d[es.to]=d[es.from]+es.cost; update=1; if(i==n)return 0; } } if(!update)return 1; } return 1; } int main(){ int ml,md; scanf("%d %d %d",&n,&ml,&md); int x,y,w; while(ml--){ scanf("%d %d %d",&x,&y,&w);//y-x<=w;建有向边x->y, build(x,y,w); } while(md--

猜你喜欢

转载自www.cnblogs.com/dxsdg558/p/11681425.html