POJ 3169 Layout(差分约束+链式前向星+SPFA)
描述
Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows numbered 1..N standing along a straight line waiting for feed. The cows are standing in the same order as they are numbered, and since they can be rather pushy, it is possible that two or more cows can line up at exactly the same location (that is, if we think of each cow as being located at some coordinate on a number line, then it is possible for two or more cows to share the same coordinate).
Some cows like each other and want
to be within a certain distance of each other in line. Some really
dislike each other and want to be separated by at least a certain
distance. A list of ML (1 <= ML <= 10,000) constraints describes
which cows like each other and the maximum distance by which they may be
separated; a subsequent list of MD constraints (1 <= MD <=
10,000) tells which cows dislike each other and the minimum distance by
which they must be separated.
Your job is to compute, if
possible, the maximum possible distance between cow 1 and cow N that
satisfies the distance constraints.
输入
Line 1: Three space-separated integers: N, ML, and MD.
Lines
2..ML+1: Each line contains three space-separated positive integers: A,
B, and D, with 1 <= A < B <= N. Cows A and B must be at most D
(1 <= D <= 1,000,000) apart.
Lines ML+2..ML+MD+1: Each
line contains three space-separated positive integers: A, B, and D, with
1 <= A < B <= N. Cows A and B must be at least D (1 <= D
<= 1,000,000) apart.
输出
Line
1: A single integer. If no line-up is possible, output -1. If cows 1
and N can be arbitrarily far apart, output -2. Otherwise output the
greatest possible distance between cows 1 and N.
样例输入
4 2 1
1 3 10
2 4 20
2 3 3
样例输出
27
提示
There
are 4 cows. Cows #1 and #3 must be no more than 10 units apart, cows #2
and #4 must be no more than 20 units apart, and cows #2 and #3 dislike
each other and must be no fewer than 3 units apart.
The best layout, in terms of coordinates on a number line, is to put cow #1 at 0, cow #2 at 7, cow #3 at 10, and cow #4 at 27.
Dist(2)-Dist(3)<=-3 //4
const int N=,M=;
int head[N],cnt=;
struct edge
{
int v,w,next;
}edges[M];
void add(int u,int v,int w)
{
edges[cnt].v=v;
edges[cnt].w=w;
edges[cnt].next=head[u];
head[u]=cnt++;
}
上面这个意思是每次在链表结构里的首部存一条(u,v)权值为w的边,这个存储和输入方式是成逆序的,而且时间O(1),空间没有浪费
所以只需要i=head[u];i!=0;i=edges[i].next就可以访问所有从U出发的边
然后这道题就是建图,建完图跑最短路径,这里用SPFA可以判断负圈
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f
const int N=,M=;
struct edge
{
int v,w,next;
}edges[M];
int Dist[N],Vis[N],head[N],In[N],cnt=;
void add(int u,int v,int w)
{
edges[cnt].v=v;
edges[cnt].w=w;
edges[cnt].next=head[u];
head[u]=cnt++;
}
int spfa(int n)
{
memset(Dist,INF,sizeof(Dist));
stack<int> st;
st.push();
Dist[]=;
while(!st.empty())
{
int u=st.top();st.pop();
Vis[u]=;
for(int i=head[u];i;i=edges[i].next)
{
int v=edges[i].v,w=edges[i].w;
if(Dist[v]>Dist[u]+w)
{
Dist[v]=Dist[u]+w;
if(Vis[v])continue;
Vis[v]=;
st.push(v);
if(++In[v]>n)return ;//一个点的入栈次数>n说明存在负圈,无解
}
}
}
return ;
}
int main()
{
int n,ml,md,a,b,c;
scanf("%d%d%d",&n,&ml,&md);
for(int i=;i<ml;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
for(int i=;i<md;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(b,a,-c);//差分约束
}
if(spfa(n)==)printf("-1\n");
else printf("%d\n",Dist[n]==INF?-:Dist[n]);
return ;
}
POJ 3169 Layout(差分约束+链式前向星+SPFA)的更多相关文章
- [poj3159]Candies(差分约束+链式前向星dijkstra模板)
题意:n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果 解题关键:差分约束系统转化为最短路,B-A>=C,建有向边即可,与 ...
- 链式前向星+SPFA
今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...
- 【模板】链式前向星+spfa
洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...
- POJ 3169 Layout (差分约束)
题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少. 析:以前只是听说过个算法,从来没用过,差分约束. 对于第 i 个母牛和第 i+1 个, ...
- POJ 3169 Layout(差分约束啊)
题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- poj 3169 Layout 差分约束模板题
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6415 Accepted: 3098 Descriptio ...
- POJ 1511 Invitation Cards 链式前向星+spfa+反向建边
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 27200 Accepted: 902 ...
- POJ 1511 链式前向星+SPFA
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const i ...
随机推荐
- linux配置sphinx
1. 配置索引 cd /usr/local/sphinx/etc/ cp sphinx.conf.dist sphinx.conf //备份配置文件,防止改错 vim sphinx.conf 配置文件 ...
- ubuntu编译安装nginx
下载nginx源码, ./configure --prefix=/usr/local/nginx/1.8 --with-http_ssl_module --with-http_dav_module - ...
- APP-3-百度地图应用
1.百度地图开发平台 http://lbsyun.baidu.com/ 1.1申请账号 1.2Android创建应用 进入百度地图开发平台->控制台->创建应用 发布版SHA1:BA:AD ...
- Python运算符,基本数据类型
1,基本的运算符: 加,减,乘,除 取余(%) 取商(//) **(幂) in not in (判断是否在里面) 1.运算符 结果是值 算数运算 ...
- iOS 申请distribution证书, 公钥,私钥
私钥只有在本机生成CSR文件的时候会产生,公钥会在CSR文件传给apple时,apple产生.
- Zookeeper原理架构
Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 首先,Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色. 然后看到官网 ...
- Unity 菜单拓展
添加自定义菜单项 [MenuItem("test/item1 %g")] public static void haha() { Debug.Log("this is a ...
- WebRequest + Https + 憑証錯誤 = 作業逾時
前言 一般的系統一登入時,都會顯示公告訊息,我們的系統也是! 因為系統效能問題,所以就幫忙看了程式.發現,每次登入時,都會到DB取公告資料,但公告並不會因為個人而有所不同,是針對整個系統的呀! 所以就 ...
- sql server连接字符串与tcp/ip开启
连接字符串1:Data Source=localhost,1433;User ID=sa;Password=123;Initial Catalog=test;Min Pool Size=1;Max P ...
- RTX二次开发SDK需要注意的地方
1.如果是ASP.net二次开发调用的,线程池必须开发 Enable 32-bit Applications设置为true. 因为RTX的调用接口很多是32位的.否则会报一下错误 RootObj = ...