HNOI2005 狡猾的商人
目录
- 前言
- 关于建图
- 关于建图的基本规律
- 关于跑图
- 如何判定是否有解
- 是跑最长路还是最短路
前言
差分约束:通过建图来判断一组(或多组)式子是否可以同时成立尽管在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 狡猾的商人相关推荐
- 1202: [HNOI2005]狡猾的商人
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1554 Solved: 745 [Submit][St ...
- BZOJ1202 [HNOI2005]狡猾的商人 【并查集】
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4180 Solved: 2015 [Submit][S ...
- bzoj1202[HNOI2005]狡猾的商人
bzoj1202[HNOI2005]狡猾的商人 题意: 账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai .所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和.给出m段时间内的总 ...
- P2294 [HNOI2005]狡猾的商人
P2294 [HNOI2005]狡猾的商人 题意: 你需要调查某个商人的账本,给你n个月内,m条账单信息,每条账单信息为x到y月的收入或者支出多少钱,问你根据账单信息判断这个账本是否合理 5 3 1 ...
- bzoj 1202: [HNOI2005]狡猾的商人(带权并查集)
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3616 Solved: 1740 [Submit][S ...
- 洛谷 P2294 [HNOI2005]狡猾的商人
洛谷 P2294 [HNOI2005]狡猾的商人 题目: 有图·.转链接 题解: 差分约束. 虽然题目中没有出现不等式,但还是属于差分约束的范畴之内的. 一开始我就按照它的要求u到v加权值w的边.但发 ...
- [HNOI2005]狡猾的商人
[HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪 ...
- [HNOI2005]狡猾的商人(差分约束)
P2294 [HNOI2005]狡猾的商人 (来自Luogu) 题目概述 数据规模: w,n,m <= 100 思路: 这个题的难点在于不好想到差分,转化:a-b=k是a-b>=k& ...
- 差分约束 [HNOI2005]狡猾的商人(洛谷 P2294)
[HNOI2005]狡猾的商人 题目大意: n 个月,m 个约束条件,判断最终是否产生矛盾: 因为这里不是 xix_ixi <= yjy_jyj + ckc_kck,而是 sumtsum_ ...
- [luogu2294] [HNOI2005]狡猾的商人
##链接## [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4027 Solved: 1940 [Submit][St ...
最新文章
- sql 字符串比较大小_SQL简单查询
- sqlalchemy Specified key was too long; max key length is 767 bytes的解决办法
- MFC最小程序(不使用应用程序向导)
- effective typescript_初学typescript(一) - 来亦何哀
- html开启页面离线缓存,HTML5 离线缓存
- Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)
- 怎样查一个文件被复制了几次_复制拷贝文件不怕再出错,一个超级好用的小工具,支持多线程工作...
- java 类型转换方法_Java中的实用类型转换的方法
- pv 6.3升级日志
- 人民币转换美金的c语言代码大全,C语言 人民币转换代码
- MPUSH消息推送服务器搭建,MPUSH消息推送服務器搭建
- 基于卡尔曼滤波算法融合图像速度数据和加速度计数据
- 试试这些方法,误删文件怎么恢复?
- 程序在单片机里是如何运行的?
- CSDN,hen hao,hen qiang da
- Pymol一些命令及使用小技巧
- PAKDD 2019 都有哪些重要看点?看这篇文章就够了!
- 基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件
- PLC控制系统的接地设计
- python如何爬有道翻译_如何利用Python网络爬虫来获取有道翻译翻译接口--手机版的哦!...
热门文章
- Mac OS X 系统更新升级包下载后的存储位置
- 【Pyecharts】Python数据可视化:英雄联盟2020赛季数据全方位解读~
- 水星路由器wan口ip显示0_wan口状态ip地址为0.0.0.0
- 另类的黑苹果“安装”方法。
- python社区发现对gml文件的分析,在Python中从GML文件中提取数据
- Linux 使用for循环结构
- AI TIME走进深圳大学城
- 关于“专家门”事件的回复
- oracle 19c_windos_64位 百度云下载。WINDOWS.X64_193000_db_home.zip。不需要积分
- Java开发面试基础,cmd启动mysql服务显示服务名无效