博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj-3169Layout
阅读量:6186 次
发布时间:2019-06-21

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

题意

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。即使说,如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。

一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。给出ML条关于两头奶牛间有好感的描述,再给出MD条关于两头奶牛间存有反感的描述。(1<=ML,MD<=10000,1<=L,D<=1000000)
你的工作是:如果不存在满足要求的方案,输出-1;如果1号奶牛和N号
奶牛间的距离可以任意大,输出-2;否则,计算出在满足所有要求的情况下,1号奶牛和N号奶牛间可能的最大距离。


题解

差分约束,第一种A向B连权值为v的边,第二种B向A连-v的边。

SPFA当有环时,-2;跑不到n, -1 我打的是DFS


常数巨大的丑陋代码

# include 
# include
# include
# include
# include
# define RG register# define IL inline# define ll long long# define mem(a, b) memset(a, b, sizeof(a))# define Min(a, b) (((a) > (b)) ? (b) : (a))# define Max(a, b) (((a) < (b)) ? (b) : (a))using namespace std;IL int Get(){ RG char c = '!'; RG int x = 0, z = 1; for(; c > '9' || c < '0'; c = getchar()) z = c == '-' ? -1 : 1; for(; c <= '9' && c >= '0'; c = getchar()) x = x * 10 + c - '0'; return x * z;}const int MAXN = 1001, MAXM = 20001, INF = 2147483647;int n, dis[MAXN], vis[MAXN], ft[MAXN], m1, cnt, m2, flag;struct Edge{ int to, f, nt;} edge[MAXM];IL void Add(RG int u, RG int v, RG int f){ edge[cnt] = (Edge){v, f, ft[u]}; ft[u] = cnt++;}IL void Dfs(RG int u){ vis[u] = 1; if(flag) return; for(RG int e = ft[u]; e != -1; e = edge[e].nt){ RG int v = edge[e].to, f = edge[e].f + dis[u]; if(dis[v] > f){ dis[v] = f; if(vis[v]){ flag = 1; return; } Dfs(v); } } vis[u] = 0;}int main(){ mem(dis, 63); mem(ft, -1); n = Get(); m1 = Get(); m2 = Get(); for(RG int i = 1; i <= m1; i++){ RG int u = Get(), v = Get(), f = Get(); Add(u, v, f); } for(RG int i = 1; i <= m2; i++){ RG int u = Get(), v = Get(), f = Get(); Add(v, u, -f); } dis[1] = 0; Dfs(1); if(flag) printf("-1\n"); else if(dis[n] == dis[0]) printf("-2\n"); else printf("%d\n", abs(dis[n])); return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8206405.html

你可能感兴趣的文章
LNMP架构应用实战——Nginx配置虚拟主机
查看>>
linux和unix常用快捷键
查看>>
IT职场人生系列之九:消费观(攒钱,继续教育,买房)
查看>>
第八部分 防火墙规则
查看>>
dedecms后台管理搜索到文章正文内容的方法
查看>>
CentOS6服务管理之DNS-本地DNS服务器的搭建
查看>>
Vim树状目录插件NERDTree安装和使用
查看>>
win7英文版系统打开txt文本乱码
查看>>
HTML JS 弹层后底部页面禁止滚动处理
查看>>
python session验证用户
查看>>
我的友情链接
查看>>
写点和硬件有关的
查看>>
硬盘/u盘能识别不能打开问题分析
查看>>
Python基础学习笔记(四)
查看>>
Dhcp 服务器在企业网中的应用
查看>>
java学习第四天
查看>>
Activity 跳转 的简单使用day6.1
查看>>
部署SSH项目到weblogic server
查看>>
iOS屏幕适配
查看>>
为什么在C++中对赋值号“=”的重载只能使用成员函数而不可以使用友元函数?求高手、大神帮我解答!...
查看>>