目录

  • 前言
  • 关于建图
    • 关于建图的基本规律
  • 关于跑图
    • 如何判定是否有解
    • 是跑最长路还是最短路


前言

差分约束:通过建图来判断一组(或多组)式子是否可以同时成立尽管在NOIP中并不是经常考到,但我觉得它建图的思想很重要,值得学习

关于建图

如果题中有一些变量关系显然,则可以直接建图

但如果关系不明了,就需要自己动笔理一理(注意表达式的排列,这样有助于找到规律),注重前缀和差分

关于建图的基本规律

1.如x=y,则add(x,y,0), add(y,x,0)2.如x>y,则add(y,x,1)3.如x≤y,则add(x,y,0)4.如x<y,则add(u,v,1)5.如x≥y,则add(v,u,0)

(其中边权根据题目而定)

add:

inline void add(int id,int to,int dis){//前向心存图e[++cnt[=(E){head[id],to};head[id]=cnt;
}

关于跑图

如何判定是否有解

注意,如果图中有环,则必定无解!

为什么?如果有环,则说明一定有x>y且y>x,这显然矛盾,于是无解

具体判环过程请参见判环

是跑最长路还是最短路

这就要根据自己加的边权的正负了

根据上面作者给出的加边规则应该跑最长路

当然也可以把所有边的边权取反,改成最短路


小K的农场

糖果

狡猾的商人

狡猾的商人:

#include<stdio.h>
#define N 1007
#define INF 0x3f3f3f3fstruct E{int next,to,dis;
}e[2*N];
int T,n,a,head[N],in[N],Q[10*N],cnt=0,dis[N],m;
bool vis[N];
inline void add(int id,int to,int dis){//存图 cnt++;e[cnt].next=head[id];e[cnt].to=to;e[cnt].dis=dis;head[id]=cnt;
}
inline bool SPFA(int s){//判环并跑最长路 for(int i=0;i<=n;i++) dis[i]=INF,vis[i]=false;//初始化 int tou=0,wei=0;dis[s]=0;Q[++wei]=s;in[s]++;vis[s]=true;while(tou<=wei){int u=Q[++tou];vis[u]=false;for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(dis[v]>dis[u]+e[i].dis){dis[v]=dis[u]+e[i].dis;in[v]++;//统计访问次数 if(in[v]>n+1) return true;//标准的bfs-SPFA判环 if(!vis[v]){vis[v]=true;Q[++wei]=v;}}}}return false;
}
int main(){scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);cnt=0;for(int i=0;i<=n;i++) head[i]=in[i]=0;for(int i=1;i<=m;i++){//建图 int x,y,val;scanf("%d%d%d",&x,&y,&val);add(y,x-1,val);add(x-1,y,-val);}bool flag=false;for(int i=0;i<=n;i++)//访问整个图,注意图不一定是联通的 if(!in[i]){flag=SPFA(i);if(flag) break;}if(!flag) printf("true\n");else printf("false\n");}
}

转载于:https://www.cnblogs.com/wwlwQWQ/p/10393704.html

HNOI2005 狡猾的商人相关推荐

  1. 1202: [HNOI2005]狡猾的商人

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1554  Solved: 745 [Submit][St ...

  2. BZOJ1202 [HNOI2005]狡猾的商人 【并查集】

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4180  Solved: 2015 [Submit][S ...

  3. bzoj1202[HNOI2005]狡猾的商人

    bzoj1202[HNOI2005]狡猾的商人 题意: 账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai .所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和.给出m段时间内的总 ...

  4. P2294 [HNOI2005]狡猾的商人

    P2294 [HNOI2005]狡猾的商人 题意: 你需要调查某个商人的账本,给你n个月内,m条账单信息,每条账单信息为x到y月的收入或者支出多少钱,问你根据账单信息判断这个账本是否合理 5 3 1 ...

  5. bzoj 1202: [HNOI2005]狡猾的商人(带权并查集)

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3616  Solved: 1740 [Submit][S ...

  6. 洛谷 P2294 [HNOI2005]狡猾的商人

    洛谷 P2294 [HNOI2005]狡猾的商人 题目: 有图·.转链接 题解: 差分约束. 虽然题目中没有出现不等式,但还是属于差分约束的范畴之内的. 一开始我就按照它的要求u到v加权值w的边.但发 ...

  7. [HNOI2005]狡猾的商人

    [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪 ...

  8. [HNOI2005]狡猾的商人(差分约束)

    P2294 [HNOI2005]狡猾的商人 (来自Luogu) 题目概述 数据规模: w,n,m <= 100 思路: 这个题的难点在于不好想到差分,转化:a-b=k是a-b>=k& ...

  9. 差分约束 [HNOI2005]狡猾的商人(洛谷 P2294)

    [HNOI2005]狡猾的商人 题目大意: n 个月,m 个约束条件,判断最终是否产生矛盾: 因为这里不是 xix_ixi​ <= yjy_jyj​ + ckc_kck​,而是 sumtsum_ ...

  10. [luogu2294] [HNOI2005]狡猾的商人

    ##链接## [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4027 Solved: 1940 [Submit][St ...

最新文章

  1. sql 字符串比较大小_SQL简单查询
  2. sqlalchemy Specified key was too long; max key length is 767 bytes的解决办法
  3. MFC最小程序(不使用应用程序向导)
  4. effective typescript_初学typescript(一) - 来亦何哀
  5. html开启页面离线缓存,HTML5 离线缓存
  6. Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)
  7. 怎样查一个文件被复制了几次_复制拷贝文件不怕再出错,一个超级好用的小工具,支持多线程工作...
  8. java 类型转换方法_Java中的实用类型转换的方法
  9. pv 6.3升级日志
  10. 人民币转换美金的c语言代码大全,C语言 人民币转换代码
  11. MPUSH消息推送服务器搭建,MPUSH消息推送服務器搭建
  12. 基于卡尔曼滤波算法融合图像速度数据和加速度计数据
  13. 试试这些方法,误删文件怎么恢复?
  14. 程序在单片机里是如何运行的?
  15. CSDN,hen hao,hen qiang da
  16. Pymol一些命令及使用小技巧
  17. PAKDD 2019 都有哪些重要看点?看这篇文章就够了!
  18. 基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件
  19. PLC控制系统的接地设计
  20. python如何爬有道翻译_如何利用Python网络爬虫来获取有道翻译翻译接口--手机版的哦!...

热门文章

  1. Mac OS X 系统更新升级包下载后的存储位置
  2. 【Pyecharts】Python数据可视化:英雄联盟2020赛季数据全方位解读~
  3. 水星路由器wan口ip显示0_wan口状态ip地址为0.0.0.0
  4. 另类的黑苹果“安装”方法。
  5. python社区发现对gml文件的分析,在Python中从GML文件中提取数据
  6. Linux 使用for循环结构
  7. AI TIME走进深圳大学城
  8. 关于“专家门”事件的回复
  9. oracle 19c_windos_64位 百度云下载。WINDOWS.X64_193000_db_home.zip。不需要积分
  10. Java开发面试基础,cmd启动mysql服务显示服务名无效