博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
差分约束
阅读量:4876 次
发布时间:2019-06-11

本文共 1001 字,大约阅读时间需要 3 分钟。

  刚学了差分约束系统。

  差分约束就是给你一堆不等式,求一个满足条件的解。比如x-y>=z,x-y<=z这些。对于大于等于的,我们可以转化为从y到x的单向最长路径,小于等于的则是最短路径。我们还要努力找到题目中的隐藏条件,或者自己建立一个原点什么的,这样才可以做。要注意的是,差分约束系统中通常会出现负数,也就是转化后变成负边权,所以不可以用Dijkstra,那我们就用SPFA就好了。

  POJ1201为模板题。

#include 
#include
#define MS(a,b) memset(a,b,sizeof(a))#define FOR(i,x,y) for(int i=x;i<=y;++i)const int o=50010;int ans,st,en,n,m,a,b,c,k,head,tail,itr,map1[o],dis[o],point[o];bool vis[o];struct EDGE//邻接表{ int v,w,next;}edge[o*3];void addedge(int s,int v,int w){ edge[itr].v=v; edge[itr].w=w; edge[itr].next=map1[s]; map1[s]=itr++;}int spfa(int st,int en){ FOR(i,st,en) dis[i]=0xc0c0c0c0;//表示与起点的距离 dis[st]=0; point[1]=st; head=1; tail=0; vis[st]=true;//队列准备 while(tail!=head) { tail=(tail+1)%o;//循环队列 k=point[tail]; vis[k]=false;//该地点用过后出队 for(int i=map1[k];i!=-1;i=edge[i].next) if(dis[edge[i].v]
a) st=a-1; if(en

  

转载于:https://www.cnblogs.com/cons/p/5239554.html

你可能感兴趣的文章
php qq第三方登陆
查看>>
添加共享文件夹
查看>>
左值与右值,左值引用与右值引用(C++11)
查看>>
错误:没有为扩展名“.html”注册的生成提供程序。
查看>>
javascript 中 with 的使用
查看>>
集合并卷积
查看>>
【BZOJ4998】星球联盟
查看>>
【BZOJ5015】[Snoi2017]礼物
查看>>
编程如写作
查看>>
问题账户需求分析
查看>>
平衡搜索树
查看>>
php工厂模式学习笔记
查看>>
MySQL表操作
查看>>
用PHP计算相对路径
查看>>
Windows Controls and WPF UserControls Inside an Xna Game Project
查看>>
整型表示
查看>>
OC基础9:预处理程序
查看>>
uva 11181 - Probability|Given
查看>>
【 D3.js 入门系列 --- 9.6 】 生产的包图
查看>>
request.getparameter和 request.getattribute的差别
查看>>