COGS1117
差分约束第一题。
所有的条件无非两种不等式
$d[i]-d[j]>=dist$
$d[i]-d[j]<=dist$
然后进行变形
$d[i]-d[j]>=dist$ $=>$ $d[j]<=d[i]-dist$ $=>$ $insert(i,j,-dist)$
$d[i]-d[j]<=dist$ $=>$ $d[i]<=d[j]+dist$ $=>$ $insert(j,i,dist)$
$d[i]+0>=d[i-1]$ $=>$ $insert(i,i-1,0)$
由此可以建图
最后需要注意两个点:
1.如何判断-1?
-1是无解的情况,什么是无解?显然是存在负环的情况。
2.如何判断-2?
当$ans==oo$时,就应输出-2,因为如果最小的距离是无穷大那么显然取任何值都可以。
//COGS 1117 //by Cydiater //2016.9.1 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <iomanip> #include <cmath> #include <ctime> using namespace std; #define ll long long #define up(i,j,n) for(int i=j;i<=n;i++) #define down(i,j,n) for(int i=j;i>=n;i--) #define FILE "layout" ; const int oo=0x3f3f3f3f; inline ll read(){ ,f=; ;ch=getchar();} +ch-';ch=getchar();} return x*f; } ll N,Ma,Mb,LINK[MAXN],len=,head,tail,q[MAXN],dis[MAXN],cnt[MAXN]; bool vis[MAXN]; struct edge{ int y,next,v; }e[MAXN]; namespace solution{ inline void insert(int x,int y,int v){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;e[len].v=v;} void init(){ N=read();Ma=read();Mb=read(); up(i,,Ma){ ll x=read(),y=read(),dist=read(); if(x>y)swap(x,y); insert(x,y,dist); } up(i,,Mb){ int x=read(),y=read(),dist=read(); if(x>y)swap(x,y); insert(y,x,-dist); } up(i,,N)insert(i,i-,); } void SPFA(){ memset(vis,,sizeof(vis)); memset(cnt,,sizeof(cnt)); up(i,,N)dis[i]=oo; dis[]=;vis[]=; head=;tail=;q[++tail]=; for(;head<=tail;head++){ int node=q[head]; for(int i=LINK[node];i;i=e[i].next) if(dis[e[i].y]>dis[node]+e[i].v){ dis[e[i].y]=dis[node]+e[i].v; if(!vis[e[i].y]){ if(cnt[e[i].y]==N){ puts("-1"); exit(); } cnt[e[i].y]++; q[++tail]=e[i].y; vis[e[i].y]=; } } vis[node]=; } } void output(){ ; cout<<dis[N]<<endl; } } int main(){ //freopen(FILE".in","r",stdin); //freopen(FILE".out","w",stdout); //freopen("input.in","r",stdin); using namespace solution; init(); SPFA(); output(); ; }
COGS1117的更多相关文章
随机推荐
- java并发:简单面试问题集锦
多线程:Simultaneous Multithreading,简称SMT. 并行.并发 并行性(parallelism)指两个或两个以上的事件在同一时刻发生,在多道程序环境下,并行性使多个程序同一时 ...
- 【活动】写#听云#原创博文 赢取iPhone 6超级大奖
移动应用的使用量和重要性与日俱增,用户体验的要求也越来越高.与桌面程序相比,移动应用耗电小,速度慢,但手机用户却希望享受到与桌面程序同样的加载速度.那么如何发现移动应用的性能黑洞,优化移动应用性能,这 ...
- ArcGIS支持MongoDB数据源
ArcGIS支持MongoDB数据源 自从NoSQL推出之后,MongoDB就作为比较杰出的代表受到广大用户的推崇,当然,与之而来的大数据的讨论也非常激烈,GIS数据源向来都是以海量来计算,所以,GI ...
- LiveSDK初始化/登录时失败的解决办法
环境描述 Windows 8.1+VS 2013 Update3+Live SDK 5.6 Metro风格的程序,集成LIVE认证 问题描述 如下图,提示Null Reference的异常. 解决办法 ...
- 富文本KidnEditor在MVC中的应用
最近看到很多网站后台都用到了富文本,包括自己所在的公司也是.公司用的KindEditor,所以就讲讲KindEditor.之前我也没学过,所以网上搜了一篇博文,直接转载如下(PS:完全以学习为目的哦~ ...
- Oracle 11g 7个压缩包说明
最初,我以为都要解压.无意间看到的一博客,明白压缩包的含义.哈哈 Oracle11g有多张安装光盘: 文件名称 ...
- Smarty单模板多缓存
Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存
- extJs学习基础3 ajax与php交互
extJs代码: <script src="build/ext-all.js"></script> <script src="build/p ...
- 如何更改IP地址的映射名字
windows系统下: 在C:\Windows\System32\drivers\etc\hosts里面添加你想对应的域名 如192.168.230.134 weekend110 注意:这要有管理员权 ...
- BitmapFactory
1.以文件流的方式,假设在sdcard下有test.png图片FileInputStream fis = newFileInputStream("/sdcard/test.png" ...