[luogu P2294] [HNOI2005]狡猾的商人
[luogu P2294] [HNOI2005]狡猾的商人
题目描述
输入输出格式
输入格式:
从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要你判断。每组数据的第一行为两个正整数n和m,其中n < 100,m < 1000,分别表示对应的账本记录了多少个月的收入情况以及偷看了多少次账本。接下来的m行表示刁姹偷看m次账本后记住的m条信息,每条信息占一行,有三个整数s,t和v,表示从第s个月到第t个月(包含第t个月)的总收入为v,这里假设s总是小于等于t。
输出格式:
输出文件output.txt中包含w行,每行是true或false,其中第i行为true当且仅当第i组数据,即第i个账本不是假的;第i行为false当且仅当第i组数据,即第i个账本是假的。
输入输出样例
2 3 3 1 2 10 1 3 -5 3 3 -15 5 3 1 5 100 3 5 50 1 2 51
true false
显然这是一道差分题。。对于一个限制条件(x,y,z),要满足f[y]=f[x-1]+z,即f[y]>=f[x-1]+z&&f[y]<=f[x-1]+z。
稍微变形得f[y]>=f[x-1]+z&&f[x-1]>=f[y]-z。也就是说,需要建一条x-1到y,权值为z的边和y到x-1,权值为-z的边,然后跑一个最短路。
如果出现了负权回路就GG。对于这一题,我采用了dfs版的spfa,更简便且适用于这题。
code:
%:pragma GCC optimize() #include<bits/stdc++.h> #define Ms(a,x) memset(a,x,sizeof a) using namespace std; ,M=; int n,m,inf,tot,tag; bool vis[N]; int lnk[N],nxt[M],son[M],w[M],dis[N]; inline int read() { ,f=; char ch=getchar(); :,ch=getchar(); +ch-',ch=getchar(); return x*f; } void add(int x,int y,int z) { nxt[++tot]=lnk[x],lnk[x]=tot,son[tot]=y,w[tot]=z; } void spfa(int x) { vis[x]=; for (int j=lnk[x]; j; j=nxt[j]) if (dis[son[j]]<dis[x]+w[j]) { dis[son[j]]=dis[x]+w[j]; ; return;} vis[son[j]]=,spfa(son[j]); } vis[x]=; } int main() { for (int T=read(); T; T--) { n=read(),m=read(),tag=,tot=,Ms(lnk,),Ms(nxt,); ,x,y,z; i<=m; i++) x=read()-,y=read(),z=read(),add(x,y,z),add(y,x,-z); Ms(vis,),Ms(dis,); ; i<=n; i++) {spfa(i); if (!tag) break;} puts(tag?"true":"false"); } ; }
[luogu P2294] [HNOI2005]狡猾的商人的更多相关文章
- LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)
[传送门] (https://www.luogu.org/problemnew/show/P2294) 解题思路 差分约束.先总结一下差分约束,差分约束就是解决一堆不等式混在一起,左边是差的形式,右边 ...
- 洛谷P2294 [HNOI2005]狡猾的商人
P2294 [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要 ...
- P2294 [HNOI2005]狡猾的商人(差分约束)
P2294 [HNOI2005]狡猾的商人 对于每个$(x,y,w)$,连边$(x-1,y,w),(y,x-1,-w)$,表示前$y$个月的收益比前$x-1$个月的收益大$w$ 这样题目就转化为询问图 ...
- 洛谷 [p2294] [HNOI2005] 狡猾的商人
差分约束做法 又是一道转换成前缀和的差分约束题,已知从s月到t月的收入w,设数组pre[i]代表从开始到第i个月的总收入 构造差分不等式 $ pre[s-1]-pre[t]==w $ 为了满足松弛操作 ...
- 题解——洛谷P2294 [HNOI2005]狡猾的商人(差分约束)
裸的差分约束 dfs判断负环,如果有负环就false,否则就是true 注意有多组数据,数组要清空 #include <cstdio> #include <algorithm> ...
- Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(带权并查集/差分约束系统)
题面 Bzoj 洛谷 题解 考虑带权并查集,设\(f[i]\)表示\(i\)的父亲(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]} ...
- P2294 [HNOI2005]狡猾的商人
题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要你判断.每组数据的第一行为两个正整数n和m, ...
- luogu 2294 [HNOI2005]狡猾的商人 差分约束
一个差分约束模型,只需判一下有没有负环即可. #include <bits/stdc++.h> #define N 103 #define M 2004 #define setIO(s) ...
- [HNOI2005]狡猾的商人 ,神奇做法——贪心
洛谷P2294 [HNOI2005]狡猾的商人 ,神奇做法--贪心 看到大牛都是写的差分约束或带权并查集,本蒟蒻都不太会(还是用差分约束过了的QAQ),但是想出一种贪心的策略,运用神奇的优先队列实现. ...
随机推荐
- NPOI导入excel文件为DataTable,使用SqlBulkCopy添加到数据库表
public DataTable ExcelToDataTable(Stream stream, string fileName) { DataTable data = new DataTable() ...
- HDU 4825 Xor Sum(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- Python学习 day04打卡
今天学习的主要内容: 一,列表 1,列表的介绍 列表是python的基础数据类型之一,其他编程语音也有类似的数据类型.例如:JS 中的数组Java中的数组等等. 它是以[]括起来,每个元素用',隔开而 ...
- SMTP发送邮件
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...
- linux du
命令参数: -a或-all 显示目录中个别文件的大小. -b或-bytes 显示目录或文件大小时,以byte为单位. -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文 ...
- 关于python的面向对象
一,面向对象 1..面向对象的过程:一切以事物的流程为核心,核心是过程二字,过程是指解决问题的步骤, 是一种机械是的编程思维 优点:负责的问题流程化,编写相对简单 缺点:可扩展性能差 2.面向对象一切 ...
- Java 中常见的各种排序算法汇总
首先,Java中自已是有排序的 说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是 ...
- idea 启动时报 error:java 无效的源发行版
说白了就是编译的版本不符合,有的地方是jdk1.7 有的地方是jdk1.8 所以你只要每个地方都保持一致就行. 每个地方!! 每个地方!! 每个地方!! 重要的设置说三遍! 以jdk1.7为例 fil ...
- Windows下Oracle创建数据库的3种方式
1. Creating a Database with DBCA DatabaseConfiguration Assistant (DBCA) is the preferred way to cr ...
- css无定宽水平居中
转载:http://www.cnblogs.com/jogen/p/5213566.html 这个博客的菜单ui还是棒棒的. 方法一 思路:显示设置父元素为:table,子元素为:cell-table ...