HDU 3592 World Exhibition (差分约束,spfa,水)
题意:
有n个人在排队,按照前后顺序编号为1~n,现在对其中某两人的距离进行约束,有上限和下限,表示dis[a,b]<=c或者dis[a,b]>=c,问第1个人与第n个人的距离最多可能为多少?(若INF则输出-2,若冲突则输出-1,否则输出距离)
思路:
建图时都将约束转成a-b<=c的标准形式,然后建一条b->a的边,权为c。然后求最短路,注意最短路跑出来的结果却是最远的合法距离,而不是最短距离。本题无需添加辅助边,只要到达不了n,则距离为INF,输出-2,若有负环,那肯定是冲突了,为-1。
- //#include <bits/stdc++.h>
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <set>
- #include <deque>
- #include <map>
- #include <algorithm>
- #include <vector>
- #include <iostream>
- #define pii pair<int,int>
- #define back que[rear-1]
- #define INF 0x3f3f3f3f
- #define LL long long
- #define ULL unsigned long long
- using namespace std;
- const double PI = acos(-1.0);
- const int N=;
- struct node
- {
- int from,to,dis,next;
- node(){};
- node(int from,int to,int dis,int next):from(from),to(to),dis(dis),next(next){};
- }edge[N*N];
- int edge_cnt, head[N];
- int inq[N], cnt[N], dist[N], n;
- void add_node(int from,int to,int dis)
- {
- edge[edge_cnt]=node(from,to,dis,head[from]);
- head[from]=edge_cnt++;
- }
- int spfa(int st,int ed)
- {
- memset(cnt,,sizeof(cnt));//入队次数
- memset(inq,,sizeof(inq));//是否在队中
- memset(dist,0x3f,sizeof(dist));//距离
- deque<int> que(,st);
- inq[st]=;
- dist[st]=;
- while(!que.empty())
- {
- int t=que.front();que.pop_front();
- inq[t]=;node e;
- for(int i=head[t]; i!=-; i=e.next)
- {
- e=edge[i];
- if( dist[e.to]>dist[t]+e.dis )
- {
- dist[e.to]=dist[t]+e.dis;
- if(!inq[e.to]) //没有在队列中
- {
- if(++cnt[e.to]>n) //入队次数过多
- return -;
- inq[e.to]=;//下面是优化,可删
- if(!que.empty() && dist[e.to]<dist[que.front()])
- que.push_front(e.to);
- else que.push_back(e.to);
- }
- }
- }
- }
- return dist[ed]==INF?-:dist[ed];
- }
- void init()
- {
- edge_cnt=;
- //for(int i=0; i<=n; i++) head[i]=-1;
- memset(head,-,sizeof(head));
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- int x, y, a, b, c, t;cin>>t;
- while(t--)
- {
- init();
- scanf("%d%d%d",&n,&x,&y);
- for(int i=; i<=x; i++) //最多
- {
- scanf("%d%d%d",&a,&b,&c);
- add_node(a,b,c);
- }
- for(int i=; i<=y; i++) //最小
- {
- scanf("%d%d%d",&a,&b,&c);
- add_node(b,a,-c);
- }
- printf("%d\n", spfa(,n));
- }
- return ;
- }
AC代码
HDU 3592 World Exhibition (差分约束,spfa,水)的更多相关文章
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径].例子:b−a<=k1,c−b&l ...
- 【poj3169】【差分约束+spfa】
题目链接http://poj.org/problem?id=3169 题目大意: 一些牛按序号排成一条直线. 有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最大距离.如果没 ...
- O - Layout(差分约束 + spfa)
O - Layout(差分约束 + spfa) Like everyone else, cows like to stand close to their friends when queuing f ...
- POJ 1364 / HDU 3666 【差分约束-SPFA】
POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c — sum[a]<=sum[a+b+1]−c−1 ...
- 图论分支-差分约束-SPFA系统
据说差分约束有很多种,但是我学过的只有SPFA求差分: 我们知道,例如 A-B<=C,那么这就是一个差分约束. 比如说,著名的三角形差分约束,这个大家都是知道的,什么两边之差小于第三边啦,等等等 ...
- 【HDOJ1529】【差分约束+SPFA+二分】
http://acm.hdu.edu.cn/showproblem.php?pid=1529 Cashier Employment Time Limit: 2000/1000 MS (Java/Oth ...
- 【HDOJ1384】【差分约束+SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1384 Intervals Time Limit: 10000/5000 MS (Java/Others) ...
- hdu 1531 king(差分约束)
King Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1534 Schedule Problem (差分约束)
Schedule Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- poj3159 差分约束 spfa
//Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...
随机推荐
- There is no resul…
There is no result type defined for type 'json' mapped with name 'success'. 这个错误是json初学者很容易遇到的错误:现在把 ...
- FZU2056 最大正方形(二分答案)
Problem 2056 最大正方形 Accept: 171 Submit: 516Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- 过滤asp.net页面每次发出请求之前访问
public class PageFiltert : System.Web.UI.Page { public PageFiltert() { // //TODO: 在此处添加构造函数逻辑 // } p ...
- Vue拖拽组件列表实现动态页面配置
需求描述 最近在做一个后台系统,有一个功能产品需求是页面分为左右两部分,通过右边的组件列表来动态配置左边的页面视图,并且左边由组件拼装起来的视图,可以实现上下拖拽改变顺序,也可以删除. 根据这个需求我 ...
- IT兄弟连 Java语法教程 Java平台的版本划分
自从Sun公司推出Java以来,就力图使之无所不能.Java发展至今,按应用范围划分为3个版本,即Java SE.Java EE和Java ME,也就是SunOne(Open Net Environm ...
- SpringMVC入门 bug集锦X2
package cn.itcast.converter; import org.springframework.core.convert.converter.Converter; import jav ...
- urllib2基础操作
Urllib2基础操作 1.打开网页(urlopen) 打开一个网页 import urllib2 response = urllib2.urlopen('http://www.baidu.com') ...
- 优化MyEclipse编译速度慢的问题
转载大神的 https://www.cnblogs.com/luxd/p/5999217.html
- redis安装&启动
1.下载:redis.io,我下载的是5.0. 2.安装 1).tar -zxvf redis-5.0.0 2).进入src目录,执行make 3.回退到src的上一级目录,编辑redis.conf ...
- NSwag生成客户端调用代码
NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码 https://www.cnblogs.com/hunanzp/p/9297361.html 前言 上一篇博客中我们 ...