【题解】 [HNOI2005]狡猾的商人(差分约束)
Solution:
- 其实这个差分是挺显然的,我们可以用\(s[i]\)表示从第\(1\)到\(i\)中间的收入和
- 重点就在式子,比如读入\(a\),\(b\),\(c\),显然可以得到一个式子:$$s[b]-s[a-1]==c$$把这个式子变成不等式就是$$s[b]>=c+s[a-1]$$$$s[b]>=c+s[a-1]$$第二个式子又可以转换成$$s[a-1]<=-c+s[b]$$这就显然是从\(a-1\)连向\(b\)一条长度为\(c\)的边,从\(b\)连向\(a-1\)一条\(-c\)的边
- 然后我们就可以跑\(SPFA\)了,这有一点就是,因为要满足所有条件,每天的收入是固定的,我们就只用如下操作:更新至的点如果为\(INF\)(初值),就更新,否则判断是否符合边的条件要求\(s[v]==s[u]+dis[u,v]\)(u为出发点,v为到达点)
- 我傻逼的没有清空\(vis\)数组,WA了无数次(太愚蠢了)
BTW:这题还可以用并查集,可以去思考丢个链接吧,Awson太强辣
Code:
//It is coded by Ning_Mew on 3.29
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+10;
int T,n,m,INF;
int head[maxn],cnt=0,dist[maxn];
bool be[maxn];
struct Edge{int nxt,to,dis;}edge[maxn*2];
void add(int from,int to,int dis){
edge[++cnt].nxt=head[from];
edge[cnt].to=to;
edge[cnt].dis=dis;
head[from]=cnt;
}
int vis[maxn];
bool SPFA(int k,int ls){
queue<int>Q;while(!Q.empty())Q.pop();
vis[k]=ls;Q.push(k);be[k]=false;
dist[k]=0;
while(!Q.empty()){
int u=Q.front();Q.pop();vis[u]=ls-1;
for(int i=head[u];i!=0;i=edge[i].nxt){
int v=edge[i].to;be[v]=false;
if(dist[v]==INF){
dist[v]=dist[u]+edge[i].dis;
if(vis[v]!=ls){
Q.push(v);
vis[v]=ls;
}
}
else{
if(dist[v]!=dist[u]+edge[i].dis)return false;
}
}
}return true;
}
void work(){
scanf("%d%d",&n,&m);
memset(head,0,sizeof(head));
memset(be,false,sizeof(be));cnt=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++){
int a,b,c;scanf("%d%d%d",&a,&b,&c);
add(a-1,b,c);be[a-1]=true;be[b]=true;
add(b,a-1,-1*c);
}
memset(dist,-0x5f,sizeof(dist));
INF=dist[0];
int ls=1;
for(int i=0;i<=n;i++){
if(be[i]==false)continue;
//cout<<i<<endl;
if(SPFA(i,++ls));else{
printf("false\n");
return;
}
}printf("true\n");
}
int main(){
scanf("%d",&T);
for(int i=1;i<=T;i++){work();}
return 0;
}
【题解】 [HNOI2005]狡猾的商人(差分约束)的更多相关文章
- 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) ...
- LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)
[传送门] (https://www.luogu.org/problemnew/show/P2294) 解题思路 差分约束.先总结一下差分约束,差分约束就是解决一堆不等式混在一起,左边是差的形式,右边 ...
- BZOJ 1202 狡猾的商人 差分约束or带权并查集
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 题目大意: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的 ...
- bzoj1202: [HNOI2005]狡猾的商人(差分约束)
1202: [HNOI2005]狡猾的商人 题目:传送门 题解: 据说是带权并查集!蒟蒻不会啊!!! 可是听说lxj大佬用差分约束A了,于是开始一通乱搞. 设s[i]为前i个月的总收益,那么很容易就可 ...
- bzoj1202: [HNOI2005]狡猾的商人(并查集 差分约束)
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4127 Solved: 1981[Submit][Sta ...
- BZOJ[HNOI2005]狡猾的商人(差分约束)
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4969 Solved: 2496[Submit][Sta ...
- P2294 [HNOI2005]狡猾的商人(差分约束)
P2294 [HNOI2005]狡猾的商人 对于每个$(x,y,w)$,连边$(x-1,y,w),(y,x-1,-w)$,表示前$y$个月的收益比前$x-1$个月的收益大$w$ 这样题目就转化为询问图 ...
- [HNOI2005]狡猾的商人 ,神奇做法——贪心
洛谷P2294 [HNOI2005]狡猾的商人 ,神奇做法--贪心 看到大牛都是写的差分约束或带权并查集,本蒟蒻都不太会(还是用差分约束过了的QAQ),但是想出一种贪心的策略,运用神奇的优先队列实现. ...
- 洛谷P2294 [HNOI2005]狡猾的商人
P2294 [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要 ...
随机推荐
- 安装Docker的三种方式
本人在安装docker时之前一直采用的是系统自带的docker软件包安装,导致下载的docker不是最新版本,因此会有很多docker命令无法使用,例如network等等,现将安装docker的方式总 ...
- 2.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结
下Table 3本章重要命令小结 命令 描述 示例 > 将输出内容重定向到指定文件中 $ echo foo > foo.txt >> 将输出内容添加到指定问价中 $ echo ...
- mysql事务,select for update,及数据的一致性处理
在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读) 在SELECT 的读取锁定主要分为两种方式: SELECT ... ...
- spring-boot dubbo项目使用docker方式部署
项目结构 本项目采用maven构建,有三个模块,分别是pms-interfaces, pms-services, pms-portal. 模块 描述 pms-interfaces 接口层,只能存放实体 ...
- 20155211 网络攻防技术 Exp7 网络欺诈防范
20155211 网络攻防技术 Exp7 网络欺诈防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (2)e ...
- 20155320《网络对抗》MSF基础应用
20155320<网络对抗>MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode 于exploit,我觉得exploit是利用一些工具和方法,通过 ...
- 20155331 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155331 <网络对抗> Exp6 信息搜集与漏洞扫描 实验问题回答 哪些组织负责DNS,IP的管理 答:美国政府授权ICANN统一管理全球根服务器,负责全球的域名根服务器.DNS和 ...
- mfc 重载赋值运算符
重载赋值运算符= 一.重载运算符格式 返回类型 operator 运算符 (参数); 如: bool operator=(char*s); int operator>(char*s); bool ...
- 页面弹出全屏浮层或遮罩时,禁止底层body滚动
· 解决方法 针对弹出的浮层的 touchmove事件,添加阻止浏览器默认行为. $('.mask-wrapper').on('touchmove', function (event) { // 监听 ...
- 面向对象第一次练手-------ArrayList集合、类、对象、冒泡排序、类型转换
思维转不过弯儿来 怎么做都是错 哪怕差一个()就成功的事情,也是千差万别 忽然想到一句话:差一步就成功的距离 = 差几万米就成功的距离 部分的理解和都体现在代码和注释里 using S ...