2021.07.19 P2294 狡猾的商人(差分约束)
2021.07.19 P2294 狡猾的商人(差分约束)
[P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
重点:
1.差分约束最长路与最短路
题意:
给出每个时间段具体账单,分析是否矛盾。
分析:
把每段时间起始时间前挪一个月,把相邻时间段连成连续的时间段,建正向边。如果只建正向边,对于开头是未知账单的来说,没法进行约束,因此建反向边。我们只需要知道所有边是否符合规矩,而不是某个具体的最大值或最小值,所以跑最长路或最短路都可以(亲自试验)。
代码如下:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
const int inf=0x3f3f3f;
const int N=11000;
int cnt,head[N],t,n,m,dis[N],vis[N],tot[N];
struct node{
int to,next,val;
}a[N*20];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void add(int u,int v,int w){
++cnt;
a[cnt].to=v;
a[cnt].val=w;
a[cnt].next=head[u];
head[u]=cnt;
}
int dijkstra(int s){
queue<int>q;
//memset(dis,-inf,sizeof(dis));
//cout<<dis[0]<<endl;//
for(int i=1;i<=n;i++)dis[i]=inf;
q.push(s);
dis[s]=0;
vis[s]=tot[s]=1;
while(!q.empty()){
int x=q.front();
q.pop();
vis[x]=0;
//cout<<x<<" ";//
++tot[x];
if(tot[x]==n)return 0;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(dis[v]>dis[x]+a[i].val){
dis[v]=dis[x]+a[i].val;
if(!vis[v]){
q.push(v);
vis[v]=1;
}
}
}
}
//cout<<endl<<endl;//
return 1;
}
int main(){
//freopen("1.txt","r",stdin);
//freopen("1.out.txt","w",stdout);
t=read();
while(t--){
n=read();m=read();
cnt=0;
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
memset(tot,0,sizeof(tot));
//memset(&a,0,sizeof(a));
for(int i=1;i<=m;i++){
int u,v,w;
u=read()-1;v=read();w=read();
//cout<<u<<" "<<v<<" "<<w<<endl;
add(u,v,w);
add(v,u,-w);
}
int flag=1;
for(int i=0;i<=n;i++){
if(!tot[i]){
int x=dijkstra(i);
if(!x){
flag=0;
break;
}
}
}
//for(int i=0;i<=n;i++)cout<<dis[i]<<" ";cout<<endl<<endl;//
if(flag)cout<<"true"<<endl;
else cout<<"false"<<endl;
}
return 0;
}
2021.07.19 P2294 狡猾的商人(差分约束)的更多相关文章
- LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)
[传送门] (https://www.luogu.org/problemnew/show/P2294) 解题思路 差分约束.先总结一下差分约束,差分约束就是解决一堆不等式混在一起,左边是差的形式,右边 ...
- BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )
好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...
- luogu 2294 [HNOI2005]狡猾的商人 差分约束
一个差分约束模型,只需判一下有没有负环即可. #include <bits/stdc++.h> #define N 103 #define M 2004 #define setIO(s) ...
- BZOJ 1202 狡猾的商人 差分约束or带权并查集
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 题目大意: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的 ...
- 2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)
2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?) [P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ...
- 2021.07.19 BZOJ2654 tree(生成树)
2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ...
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- P2294 [HNOI2005]狡猾的商人(差分约束)
P2294 [HNOI2005]狡猾的商人 对于每个$(x,y,w)$,连边$(x-1,y,w),(y,x-1,-w)$,表示前$y$个月的收益比前$x-1$个月的收益大$w$ 这样题目就转化为询问图 ...
- 题解——洛谷P2294 [HNOI2005]狡猾的商人(差分约束)
裸的差分约束 dfs判断负环,如果有负环就false,否则就是true 注意有多组数据,数组要清空 #include <cstdio> #include <algorithm> ...
随机推荐
- Struts2搭建及利用OGNL表达式弹出计算器
0x01 环境搭建 1.创建Struts2应用 创建一个动态网站项目 2.配置Tomcat启动环境 3.在WebContent目录下的WEB-INF文件夹中创建web.xml,Tomcat启动时会加载 ...
- MVC 生成安全验证码(例:用于登陆验证) 方法2
MVC前台页面中,重新获取图片验证码的第二种方式:(前端页面代码如下,后台页面请参考上一篇文章) ---------html <td> <img id="imgValida ...
- 通过rem自适应屏幕尺寸
通过rem自适应屏幕尺寸 常用的前端单位 px px就是pixel的缩写,设备分辨率,物理像素 pt pt就是point的缩写,逻辑分辨率,逻辑像素 em 参考物是父元素的font-size,具有继承 ...
- 《前端运维》五、k8s--3灰度发布、滚动更新与探针
一.灰度发布 灰度发布是一种发布方式,也叫金丝雀发布,起源是矿工在下井之前会先放一只金丝雀到井里,如果金丝雀不叫了,就代表瓦斯浓度高.原因是金丝雀对瓦斯气体很敏感.灰度发布的做法是:会在现存旧应用的基 ...
- Aspect 切面?
AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能.比如,一个日志模块可以被称作日志的AOP切面.根据需求的不同,一个应用程序可以有若干切面.在Spring ...
- 在Java中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环.(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto ...
- Mybatis有哪些执行器?
Mybatis有三种基本的Executor执行器: SimpleExecutor.ReuseExecutor.BatchExecutor. SimpleExecutor:每执行一次 ...
- Servlet之间的关联
- osi七层模型&tcp/udp
1.TCP/UDP协议 1.1 TCP协议 可靠,速度慢,全双工通信 建立连接三次握手,断开连接四次挥手 建立起链接之后,发送每条消息都有回执,为了保证数据的完整性,还有重传机制 数据传输:有收必有发 ...
- centos云服务器配置redis外网可访问
找到这行,注释 bind 127.0.0.1 #bind 127.0.0.1 找到这行,修改 protected-mode yes protected-mode no 重启服务 ./redis-ser ...