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的更多相关文章
随机推荐
- 开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!
青瓷引擎的成长 青瓷引擎自2015年4月项目启动开始,7月首次亮相2015年ChinaJoy,便得到业界的极大关注,随后开启限量测试,收到数百个开发者团队的试用申请及反馈,期间经历了18个内测版本,完 ...
- sql server 事务处理
事物处理 事务是SQL Server中的单个逻辑单元,一个事务内的所有SQL语句作为一个整体执行,要么全部执行,要么都不执行. 事务有4个属性,称为ACID(原子性.一致性.隔离性和持久性) ...
- 树链剖分(+线段树)(codevs4633)
type node=^link; link=record des:longint; next:node; end; type seg=record z,y,lc,rc,toadd,sum:longin ...
- Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run (default-cli) on project Maven_WebTest: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run failed: C
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 工作框架各种使用整理---使用Cache
<service verb="get" noun="Products"> <implements service="sang.pro ...
- 屠龙之路_击败DB小boss_FifthDay
摘要:服务器大魔王被击败的消息传到了恶龙boss那里,恶龙大怒派出了自己的首级大将DB人称小boss,但小boss的名号并没有吓到七位屠龙勇士,经过他们齐心协力的进攻,最终击败了DB,小boss临死前 ...
- android部分开发摘要
Async 异步 不会阻塞当前线程sync 同步 数据库是应用软件|结构化数据存储 JDBC SQL ellipsis 省略 content provider URI thread--lo ...
- 检测当前网段哪些IP是在线的
[root@storage ~]# cat ping.ip #!/bin/bashfor ip in `seq 1 255` do { ping -c 2 192.168.220 ...
- iOS开发--QQ音乐练习,后台播放和锁屏界面
一.设置后台播放 首先允许程序后台播放 代码实现 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- bootstrap fileinput-上传回调
通过第三分jquery重新绑定一个重新加载事件 $("#file-4").on("fileuploaded", function(event, data, pr ...