hdu 3440 House Man
差分约束系统
例如,
5 6
20 34 54 10 15
这一组测试数据
先编号,分别为1 2 3 4 5 ,然后可以写出一组表达式,两个编号之间的距离必定大于等于1的,所以i+1到i建立有向边,权值为-1,然后进行结构体排序,根据高度来排序。然后相邻两个节点再写表达式,标号小的到标号大的之间建立有向边,权值为D,最后把高度最小的编号和高度最大的编号找出来,因为要求的是最大值,所以采用最短路来解决。把高度最小的编号设置为起点,求出到高度最大的编号的最短路,就是答案。如果存在环,就输出-1。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std; const int maxn=;
const int INF=0x7FFFFFFF;
struct HH {int id,heights;}node[maxn];
struct abc {int startt,endd,costt;}dd[*maxn];
bool cmp(const HH&a,const HH&b){return a.heights<b.heights;}
vector<abc>ljb[maxn];
int ff[maxn],summ[maxn],dist[maxn];
int n,h,D,ss,ee,qd,zd;
int tyu; void spfa()
{
queue<int>Q;
while(!Q.empty()) Q.pop();
int i;
for(i=; i<=n; i++) dist[i]=INF;
memset(ff,,sizeof(ff));
memset(summ,,sizeof(summ));
dist[qd]=;
ff[qd]=;
Q.push(qd);
while(!Q.empty())
{
int hh=Q.front();
Q.pop();
summ[hh]++;
if(summ[hh]>n){tyu=;break;}
ff[hh]=;
for(i=; i<ljb[hh].size(); i++)
{
abc noww;
noww=ljb[hh][i];
if(dist[hh]+noww.costt<dist[noww.endd])
{
dist[noww.endd]=dist[hh]+noww.costt;
if(ff[noww.endd]==)
{
ff[noww.endd]=;
Q.push(noww.endd);
}
}
}
}
} int main()
{
int T,t;
scanf("%d",&T);
for(t=;t<=T;t++)
{
int i;
scanf("%d%d",&n,&D);
for(i=;i<=n;i++) ljb[i].clear();
for(i=;i<n;i++)
{
scanf("%d",&h);
node[i].id=i+;
node[i].heights=h;
}
int tott=;
for(i=;i<n-;i++)
{
dd[tott].startt=node[i+].id;
dd[tott].endd=node[i].id;
dd[tott].costt=-;
ljb[node[i+].id].push_back(dd[tott]);
tott++;
}
sort(node,node+n,cmp);
ss=node[].id;
ee=node[n-].id;
if(ss>ee) qd=ee,zd=ss;
else qd=ss,zd=ee;
for(i=;i<n-;i++)
{
if(node[i].id>node[i+].id)
{
dd[tott].startt=node[i+].id;
dd[tott].endd=node[i].id;
dd[tott].costt=D;
ljb[node[i+].id].push_back(dd[tott]);
tott++;
} else if(node[i].id<node[i+].id)
{
dd[tott].startt=node[i].id;
dd[tott].endd=node[i+].id;
dd[tott].costt=D;
ljb[node[i].id].push_back(dd[tott]);
tott++;
}
}
tyu=; spfa();
printf("Case %d: ",t);
if(tyu==)printf("%d\n",dist[zd]-dist[qd]);
else printf("-1\n");
}
return ;
}
hdu 3440 House Man的更多相关文章
- hdu 3440 差分约束
看完题目第一遍,感觉很简单.当写完程序跑测试用例的时候,发现第二个总是过不了,然后好好研究了一下测试用例,才知道原来不是程序有问题,而是我的建图方式错了.对于这些无序的点,如果高的在右边,不等式是di ...
- HDU 3440 House Man(编号排序+线性差分约束跑最短路)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解
题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...
- hdu 3440(差分约束好题)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- action = "#" 是什么意思 在HTML语言中
action = "#" 是form标签的属性,代表提交数据到本页,如:// 提交数据到a.aspx页面<form action="a.aspx"> ...
- 自己写的一个jQuery轮播插件
大概是四月初开始写的,中间停了有一个月吧.这是我在Github的第一个项目.项目地址:https://github.com/linzb93/jquery.slide.js. 轮播应该是最好写的插件了, ...
- Base64加密与解密
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; // 将 str进行 BASE64 编码 public static Stri ...
- sql 时间格式化
sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...
- Amabri添加YDB报错
点部署直接出现如下图: 通过查看日志: tail -f /var/log/ambari-server/ambari-server.log java.lang.RuntimeException: Una ...
- Spark编程模型及RDD操作
转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...
- Web流量劫持
BadTunnel实战之远程劫持任意内网主机流量 http://www.freebuf.com/articles/web/109345.html http://blog.csdn.net/ts__cf ...
- Tomcat内存溢出
Tomcat内存溢出的三种情况及解决办法分析 转载于网络 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据 ...
- MVC网站后台分离
1.新建一个项目TestAdmin项目类型随便选一个,待会删掉,因为这里我只需要解决方案名称 [项目存放于F盘 F:\TestAdmin] 2.新建一个 ZGJ.Web 的前台MVC项目,将开 ...
- 利用python 与 wmi 获取WINDOWS基本信息
#!/usr/bin/env python3.5 # -*- coding:utf8 -*- import platform import subprocess import wmi def serv ...