【题解】 [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个账本,需要 ...
随机推荐
- [SDOI2011]工作安排 BZOJ2245
分析: 费用流裸题,按照题面要求建边就可以了,语文题,我读了10多分钟才知道这题干啥...特别是注意一个细节a[j+1]-a[j]... 附上代码: #include <cstdio> # ...
- struts2_maven_learning
以下为学习maven struts2 的学习过程,现记录如下. 1.创建一个完善的maven程序 maven:(jar) 1)maven project 2)facet 3)pom.xml,depen ...
- Android应用安全之WEB接口安全
Android应用安全不仅包括客户端的安全,也包括web接口的安全.移动App中的Web接口安全主要分为以下几块: 1.SQL注入漏洞 这是一个不能再常见的漏洞类型了,由于App的特性,开发人员认为使 ...
- windows系统中Dotnet core runtime 安装后,无法启动次程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll的解决方法
因为dotnet core runtime依赖vc++2015,如果系统未安装vc++2015则会报上面的错误 解决方案:先下载安装vc++2015再安装dotnet core runtime, vc ...
- Java开源博客My-Blog之docker容器组件化修改
前言 5月13号上线了自己的个人博客,<Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦>,紧接着也在github上开源了博客的代码,到现在为 ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- 批量备份H3C交换机路由器配置
第一种(使用ftp下载配置文件): #!/bin/bash datetime=`date +%Y%m%d` BAKTIME=`date +%Y%m%d%H%M%S` user="admin& ...
- 记录Jenkins+gitlab+maven
摘要 昨天抽空将jenkins+gitlab(git)+maven整合了一下,再次记录一下以防下次再去查找省的麻烦. git.maven.java配置 启动jenkins之后进入系统管理里面的Glob ...
- Unity XLua 官方教程学习
一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua; public class ByString : MonoBehaviour { LuaEnv lu ...
- 金蝶盘点机PDA仓库条码管理家电类序列号扫描操作方法-采购入库单
1.1. 采购入库单 传统的进销存管理软件需要人工识别商品品种,清点商品数量,然后再去人工手工在电脑上一行行的录入采购入库单.录单效率低,误差大. 如果使用汉码盘点机PDA,入库时,仓管员只需要手持 ...