自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Anxdada -- 我等风来也等你

此博客不会维护了

  • 博客(45)
  • 收藏
  • 关注

原创 HDU 3038 How Many Answers Are Wrong【带权并查集】

传送门 // 题意 : 有n个数, 有m次说法, 每次a b c 表示说下标从sigma[a, b] = c, 然后问这m次说法中有几次是矛盾的.思路: 首先我们明白这类题就是在询问同一个集合之间的关系与已知的是不是矛盾的. 所以很自然的想到带权并查集. 其次就是大概是个前缀的思想, a b c 代表sum[b] - sum[a-1] = c, 也就是rank值我们可以定义为b比a-1高c...

2018-02-27 19:20:16 219

原创 hihoCoder 1515 分数调查 【带权并查集】

传送门 // 题意: 在某次学校的测验后没有公布成绩, 但是有一些消息传出, 格式为 a b c 表示a同学比b同学的分高c分 , 然后现在给出q个询问, 每次询问a同学比b同学的分高多少.思路: 比较明显的带权并查集了, 我们的rank数组维护的就是集合内的点比根节点的分高多少了. 那么路径压缩可以写为 : rank[x] += rank[tmp]; // tmp为x的父亲.那么Un...

2018-02-27 16:52:48 406

转载 POJ 1182 食物链 【带权并查集】

传送门 不好意思呀, 这篇博客我就是转载的, 也就是这位大神的. 大家还是请看他的解释吧, 非常清楚易懂 …. 也可以当做是带权并查集的学习. 我觉得带权并查集就是要另开一个数组去记录当前这个点和根节点的关系, 然后还要推导路径压缩时的方程转移, 以及Un时的注意点, 注意到这些的话也就简单了吧? AC Codeconst int maxn = 5e4+5;int fa[maxn...

2018-02-27 16:24:15 220

原创 HDU 1272 小希的迷宫 【并查集好题】

传送门 // 题意: 问给定的一幅图是否任意两点之间有且仅有一条路径.思路: 首先一种比较笨的方法就是先并查集维护联通性, 然后用dfs判断图是否有环, 比较麻烦, 但是也能过., 当然最好的方法就是用并查集也可以判环, 当然你的并查集是用了启发式合并的, 所以我们就有每个点的所在集合的size, 图中有环是什么情况了, 也就是某个点的size或翻一倍, 也就是最终的点的size不可能刚好等...

2018-02-27 11:36:35 472

原创 并查集板子

为了复杂度的保证, 我们引入了压缩路径和启发式合并, 引入rank机制. 也就是尽量让size小的向大的上面并…. rank值为它的size大小….const int maxn = 1e5 + 5;int fa[maxn], r[maxn];int n;void init() { for(int i = 1 ; i<= n ; i++){ fa[i] ...

2018-02-27 11:22:30 366

原创 POJ 2488 A Knight's Journey 【dfs + 思维】

传送门 // 题意: 给定一个n*m的棋盘, 问是否有一种方式可以使这匹马走遍这个棋盘的每一个点, 有的话打印出路径, 并且字典序要尽可能的小.思路: 可能难点的地方就是字典序那, 其实不用管, 因为如果我们从除(1, 1)的点走完全程, 那为啥不从(1, 1)出发这个再是字典序最小的呀, 所以我们直接从(1, 1)开始搜就OK啦, 然后因为字典序的原因8个方向有一定的顺序, 然后只要能搜出...

2018-02-26 23:19:00 215

原创 POJ 3009 Curling 2.0 【dfs 而不是 bfs】

传送门 // 题意: 一个矩阵, 从2到3, 1是墙, 每次将这个冰壶往一个方向扔出去, 这个冰壶是有在碰到了石头才会停下来, 并且被撞的石头消失, 或者冰壶出界. 问最多扔10次问到达终点的最少扔的次数是多少..思路: 这个很多人一眼看最短, bfs没跑了, 但是我们要注意这个图是会发生改变的, bfs同时的多个状态进行会影响图的, 从而影响答案, 所以我们看10次, 图的大小, 因为用深...

2018-02-26 21:48:21 305 1

原创 UVA 11624 Fire! 【经典bfs】

传送门 // 题意: 在迷宫里有几处地方着火了, 火势每秒向上下左右扩散, 然后有一个J的人在迷宫里, 问能否跑出迷宫(只要他到达了边界就算出迷宫了). 注意 火 与 人 都不能穿墙思路: 我们做两次bfs, 第一次把所有的着火点进行bfs, 处理出每一个火可以蔓延到的地方的着火时间, 然后再对人进行一次bfs, 除了一些判断条件外再加上判断人到这个点的时间与着火事件比较一下, 如果到达的时...

2018-02-26 21:30:28 298

原创 POJ 3126 Prime Path 【bfs】

传送门 题意: 给定两个四位数的素数, 然后每次可以将第一个素数的某一位数字变成其他数字, 但是要保证变化后的那个数依旧是素数, 问最少需要多少步可以变成第二素数.很明显的bfs, 先预处理下4位数的素数, 然后直接做bfs即可, 注意就是一些技巧为了书写方便.AC Codeconst int maxn = 1e4+5;bool pri[maxn], vis[maxn];void init()

2018-02-25 11:17:23 313

原创 CF EDU 38 A - D 题解

传送门 A: 给定一个字符串, 如果有连续两个的元音的话, 删去后面那个, 然后剩下的连接重复此操作. 输出最后的字符串, (注意: 这个的元音加了一个字母 y).直接按照题意模拟就行啦. AC Codeint vis[maxn];void solve() { string s; int n; vis['a'] = 1; vis['e'] = 1; vis['i'] = 1;

2018-02-24 20:33:02 277

原创 POJ 2942 Knights of the Round Table 【点双联通 + 二分图染色法判奇环】

传送门 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求:1、 相互憎恨的两个骑士不能坐在直接相邻的2个位置;2、 出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果。如果出现有某些骑士无法出席所有会议(例如这个骑士憎恨所有的其他骑士),则亚瑟王为了世界和平会强制把他剔除出骑士团。...

2018-02-24 15:01:13 395

原创 HDU 3394 Railway 【点双联通】

传送门 // 有一个公园有n个景点,公园的管理员准备修建m条道路,并且安排一些形成回路的参观路线。如果一条道路被多条道路公用,那么这条路是冲突的;如果一条道路没在任何一个回路内,那么这条路是不冲突的问分别有多少条有冲突的路和没有冲突的路思路: 如果某条边有冲突, 那么它至少存在于两个环中, 也就是我们要判断图中的环, 其边于点的关系: 边数 = 点数 : 一个环 边数 > 点数 : >一个环

2018-02-24 14:51:01 416

原创 HDU 4738 Caocao's Bridges 【桥】

传送门 // 给定一幅图, 问能够通过炸掉一条边使得原图的联通快数量变大. 边上有权值, 派去炸桥的人数一定要大于等于桥的权值. 问最少需要去几个人. 无解输出-1.那么很明显就是把图中所有的桥都求出来然后取最小即可. 记住几个坑点. 1: 如果图本来就不连通, 那么输出0 2: 如果桥上没有人, 那么应该输出1, 至少要去一个人背炸药.AC Codeconst int mod = 1e9+7

2018-02-24 14:45:57 214

原创 CodeChef - AMR16I Mancunian Hoards Black Money 【前缀 + 思维】

传送门 // 给定一个s, n, x. 下一行n个数, 然后先第一堆的数是s, 然后每次新创建一堆, 它的数量是前面所有的堆数相加在加a[i], 然后我们就得到了n+1个数字, 问能否从这n+1个数字中恰好选择一些数使得他们加起来 = x.我们可以注意到这是一个很经典的问题, 从给定一些数中恰好选择一些数使得他们恰好等于某个数, 但是这个数据量非常的大, 有63项, 那么二进制就不行了, 像这种经

2018-02-24 13:30:08 365

原创 CodeChef - AMR16C Influence on Social media 【思维 + 巧妙求因子个数】

传送门 // 给定n个人发表的帖子数量, 如果一个发表的帖子数量的因子个数是奇素数, 那么他就是一个支持者, 问这n个人中的支持者的排名, 排名是根据在所有人中它发表的帖子数量的多少定的. 并且先输出发表的数量多的.思路: 我们肯定第一步就可以确定的是我们要的数一定是个平方数, 因为一个数的因子都是成对出现的, 其次是如何快速求一个平方数的因子个数了, 用到约数个数定理, 但是还是太慢了, 我们可

2018-02-24 13:21:00 392

原创 CodeChef - AMR16E Black Money Island 【并查集 + 思维】

传送门 // 题意: 给定一幅无向带权图(n, m), 给定一个确定权值x, 问在图中是否可以构造出一颗权值为x的生成树. 并且边权一定是A or A + 1.思路: 我们首先每条边先减去A, 那么就变成了一幅01图, 然后预处理做一次生成树算出至少需要1的数量, 所以我们用并查集维护这颗树, 并且要先连接权值为0的边, 再连接权值为1的边并保存下来, 预处理完后, 每一次询问我们先初理出x, 此

2018-02-24 13:13:39 425

原创 Wannafly 挑战赛 10 B, C 题解

传送门 B: 我的姿势不对, dfs深搜超时, 题解说的是dp. 那么我们考虑dp做法, dp[i][j] 代表前i个轮子有j个选择了匹配的小写字母, 那么对于当前这个轮子的匹配要么是匹配一个小写字母, 要么匹配一个空字符, 然后依次匹配下去, 判断是否可以到达dp[n][size(s)] 即可, 注意长度> n 直接NO.AC Codeonst int maxn = 3e2+5;char s[

2018-02-24 13:04:24 292

原创 CF Round #461 (Div. 2) A - D题解

传送门 A: 这是一个坑题, 情况必须要想全面. 题意: 初始有一个原始玩具 , 每次可以扔一个原始玩具进机器可以额外获得一个原始玩具和一个复制玩具, 每次可以扔一个复制玩具可以额外获得二个复制玩具. 给定x个复制玩具和y个原始玩具, 问是否可以得到. 很明显就是要去判断下x - y + 1的奇偶即可, 但是特殊情况要考虑完全, 首先要保证这个是>=0的, 其次y 不能等于0, y = 1时

2018-02-14 01:53:10 301

原创 2018年全国多校算法寒假训练营练习比赛(第四场)E 题 通知小弟 强联通

传送门 // 中文就不说题意了, 可以看出图中可能有环, 于是我们先缩环, 变成DAG, 然后我们的目标就是缩环后的DAG中那些入度为0的点了, 我们必须都要通知这些点, 所以只要有一个不能通知就是no, 否则就是入度为0的点数. 缩环用强联通, 然后在缩环的过程中要判断下该点是否可以被HA通知, 然后在标记该scc即可.AC Codeconst int maxn = 5e2+5;int df

2018-02-13 22:13:39 338

原创 HDU 3416 Marriage Match IV【最短路 + 最大流】经典模型好题

传送门 题意: 给定一幅单向图(n, m), 起点和终点, 问起点到终点有所少条最短路径, 每条边只能做一遍. 思路: 如果没有只走一遍的限制, 那么就是个很简单的最短路了. 关键在于只能走一遍. 那么我们就想跑最短路吧图中有用的边先存下来, 重新建图, 让每条边的流量的为1, 然后跑s - t 的最大流就是ans. 有用的边为(假设dis1表示从s出发的最短路, dis2表示t出发的最短路.)

2018-02-13 17:04:39 362

原创 HDU 4370 0 or 1 【抽象最短路】

传送门 题意:给定一个c矩阵 , 找出一个01矩阵满足题意所给的那四个条件后问矩阵对应位置相乘再相加最小是多少.先膜一发出题人太猛了. 这里我只能讲讲我的理解. 思路: 这种题下手点在于那四个条件, 需要对离散有一定的学习 . 往图的度数矩阵方向去想就不是这么难理解了. 条件一: 简洁刻画了1的出度为1, 条件而:刻画了n的入度为1. 条件三:表示除去1,n其它所有点入度等于出度,

2018-02-13 16:47:46 331

原创 HDU 4725 The Shortest Path in Nya Graph 【最短路之建图难点】

传送门 题意: 有n个点, 他们分布在不同层, 我们可以从任意一个点在x层移动到另一个点再x+1层, 花费为层之间的花费c, 同理反向, 同时给出m条点之间的边, 然后问1-n的最短路是多少. 不可达输出-1.思路: 最原始的想法就是相邻层的所有点连边, 然后跑最短路即可. 但是数据范围有1e5个点, 假设只有两层, 每层4e5个点, 这样连边就是n^2了, 已经T了, 所以不行, 我们的关键应该

2018-02-13 16:28:50 268

原创 POJ 2502 Subway 【最短路之建图为关键】

传送门 题意: 有n条地铁线, 相邻两站可以做地铁到达, 速度为40km/h, 可以在任意站换乘其他地铁线必须走路, 速度为10km/h, 给定起点和终点问最少需要多少分钟才能到终点.思路: 很明显这是一个最短路, 关键在于建图, 因为每个点都要向终点连一条速度为10km/h的边, 同时起点也想每个站连边, 同一条地铁线的相邻站连40km/h的边, 不同的地铁线中的站也要两两连走路的边, 然后跑

2018-02-13 16:16:16 323

原创 POJ 3159 Candies 【差分约束】

传送门 题意: 给定n个限制关系u v w表示u认为v的糖果数量最多比它多w个. 问在满足这些的条件下, 1与n的糖果数量最大的差是多少.思路: 知道差分约束的很容易可以判断出这个是差分约束, 我们用d数组表示一个人拥有的糖果数量那么结合题意就有d[u] + w >= d[v], 也就是类似于最短路中的松弛条件dis[u] + g[u][v] <= dis[v], 只是形式上有点不同, 但是它的实

2018-02-13 16:09:17 319

原创 LightOJ - 1074 Extended Traffic 【spfa判负环 + dfs】

传送门 题意:给定(n, m)有向图, 每个点有点权, u->v的代价是(a[v]-a[u])^3, 给出q个询问, 问从1出发到询问的该点的最小代价, 如果代价<3或者不能到达该点输出’?’.思路: 很明显这幅图是可能有负权环, 在负权环中的点代价肯定是无穷小, 负权环中的点可以到达的点也是无穷小, 所以我们用spfa跑最短路, 每跑到一个负权环我们就dfs其中的任意一个点可以到达的点并标记他们

2018-02-13 15:54:51 348

原创 POJ 1847 Tram 【最短路】

传送门 题意: 给定n个十字路口可以通向其他十字路口的图, 给定终点和起点,问起点到终点最少需要改变多少次方向, 下面n行中第1个数字表示连接的十字路口数目, 第二个数字表示该十字路口的直接连接的十字路口(即不用转方向), 其他的都要转一次方向.思路:直接每两个十字路口之间如果反向直接相连连边0, 否则连边1, 跑最短路即可.AC Codeconst int maxn = 1e2+5;int n

2018-02-13 15:26:13 272

原创 POJ 1062 昂贵的聘礼 【枚举 + 最短路】

传送门 // 中文就不多说题意了.思路: 我们首先明确一点的就是我们的关键人物是1号点, 因为我们我们找出的一条路径上所有人的等级都是跟1号点有着联系的, 所以我们直接枚举该范围, 我们通过对题意的了解知道对于一个物品它的优惠物品到它应该有条单向边, 但是我们由于后面计算的了解知道我们每枚举一次范围就会算所有点到1点的最短距离, 即多源单汇的情况, 所有我们先建图的时候反向建图, 然后以1作为起点

2018-02-11 22:43:58 262

原创 POJ 3660 Cow Contest 【floyd求传递闭包 + 思维好题】

传送门 // 题意: 每头牛都有一个确定的排名, 两头牛打架排名高的一定会赢, 现在给出m场比赛双方以及结果, 问最多可以确定多少头牛的排名.思路: 首先分析如何才能确定一头牛的排名, 那就是假设一头牛a可以打败x头牛, 同时也输给了y头牛, 那么如果x+y == n-1那么这头牛的排名就是可以确定的, 同时如果a打败了b, b打败了c, 那么a也是打败了c的, 也就是具有传递性. 所以我们先用f

2018-02-11 12:56:44 292

原创 HDU 1540 Tunnel Warfare 【线段树 + 思维】

传送门 // 题意: 初始1-n村庄全部相连, 然后有三种操作D x 表示摧毁x村, R 表示修复最近一个被摧毁的村, Q x 询问与x存间接或者直接相连的村有多少个,首先询问很明显的就是最接近该询问村的的一段区间的maxx, 和minn值,可以用线段树来维护, 所以终点是找那段区间, 其实也比较好找,也就是二分找下即可.AC Codeconst int maxn = 5e4+5;int cas

2018-02-07 17:29:49 248

原创 atcoder ARC 084 CD题解

传送门 C: 给定三组数, 问从每一组中选择一个数使得满足a < b < c 的选法有多少种.首先我们要知道对于第二个数组中的每一个数, 第三个数组中有多少个大于它的记成cb[i], 并做前缀. 然后以第一个数组中的数作为基准, 从第二个数组找大于它的分界线, 那么处于这个区间中的数 cb[n] - cb[pos-1]就是答案, 然后累计即可.AC Codeconst int maxn = 1

2018-02-07 17:14:29 455

原创 atcoder ARC 086 CD题解

传送门 C: 问最少要给多少个元素重新赋值, 使得这个数组中最多只有k种数字.直接记录每个数字出现的次数, 然后从大到小排个序, 从第k+1种那开始选去后面的元素即可.AC Codeint a[maxn];bool cmp(int a, int b) { return a > b;}void solve(){ int n, k; cin >> n >> k;

2018-02-07 17:01:07 532

原创 atcoder APC 001 BD题解

传送门 B: 给定两个长度相同的数组, 每次从第一个数组中选一个位置x, 从第二个数组中选一个位置y, 然后a[x]+=2, b[y]++, 问经过若干次这样的变化后能否使a, b两个数组相等.我们另ci = ai - bi, 若ci == 0 不用管, 若ci < 0 , 求和ci/2(向下取整, 为什可以向下取整了,因为此时是最接近于bi的一个数, 当然有可能等于bi, 否则就差1, 差1那

2018-02-07 16:49:30 557

原创 POJ 2528 Mayor's posters 【线段树(区间为节点问题)】

传送门 // 首先说下这道题数据应该是有问题的… 推荐这道题 题意一模一样, 但是这道题更严谨一点. 就是给出n个区间的覆盖信息, 问最后有多少张海拔被看见. 很明显的线段树区间问题, 以一段区间为线段树的一个节点, 然后做区间更新和区间覆盖, 由于区间信息较大, 要进行离散化,这道题唯一有坑的就是它会出现(1, 1), (2, 2)这种长度为0的数据(那里说贴海报怎么可能贴长度为0的), 但

2018-02-03 22:10:45 263

原创 CF EDU 37 F SUM and REPLACE 【线段树区间更新中的单点更新】 好题!

传送门题意: 先给出d(i) 的定义为i的因子个数, d(2) = 2, d(1) = 1. 给出n个数, q次操作, 1 l r 代表把l - r 中所有的数变成对应的a[l]; 2 l r 求∑ri=la[i]思路: 当然我们先nlogn预处理出d数组, 然后这种问题是经典的区间更新中的单点更新, 这种问题一般是每个点被修改的次数有限, 像这里应该是被修改6次左右(当a[i] <= 2时修

2018-02-03 18:59:22 385

原创 CF EDU 37 A - C, E - G 题解

传送门 A: 有n个地方, 其中有k个水龙头, 水龙头每秒可以向两边扩展1格, 问把n个地方都浇了至少需要多少秒.直接暴力算每个需要的最小值, 然后取这些的max值即可.AC Codeconst int maxn = 2e2+5;int a[maxn], vis[maxn];void solve(){ int n, k; Fill(vis, 0); sc...

2018-02-03 18:54:51 355

原创 POJ 1364 King 【差分约束 + 判环模型】

传送门 / 题意: n个数的一个序列,m个约束, si, ni, oi, ki, 代表了序列中第si个数到第si+ni个数的和大于或小于ki, oi = gt = 大于, oi = lt = 小于 问是否存在相悖的约束// 思路: 很明显的不等式, 再看问题即可知道就是差分约束. 约束已经很明显了设sum[i]为前i个数的和,那么就可以得到约束:si, ni, gt, ki , 因为是小

2018-02-02 20:27:09 332

原创 POJ 3169 Layout 【差分约束系统 + 最短路模型】

传送门 // 有n头奶牛, 然后给出一些奶牛之间的必须从存在的一些距离限制, 问你是否有可能存在一种排列满足所给的限制条件. 如果有则输出1 - n 头奶牛最长的距离是多少. 如果不存在输出-1, 如果这个距离可以无限大, 则输出-2.// 很明显的是差分约束的裸题, 我们用一个数轴来表示每一头奶牛, 那么对于第一种a b at most c , 就是dis[b] - dis[a] <= c, 也

2018-02-02 17:36:21 283

原创 扔鸡蛋问题的改编(鸡蛋个数确定)

最经典的问题. 就是有n层楼, 但是鸡蛋个数是定的, 问最坏的情况下要测多少次.这篇博文讲的非常好, 原理以及解法. 传送门n 为楼层. // 两个鸡蛋是: k*(k+1)/2 >= n;// 三个: (k^3+5*k)/6 >= n; // …….// 再多也只能用dp来解了…..

2018-02-02 13:37:23 418

原创 洛谷 P1608 路径统计 【膜改dij】

传送门 // 题意: 就是求1-n的最短路条数.注意一个点就是重边只算一条(所以我wa了两发), 所以我们建图时需要去重. 然后开一个数组记录下到这个点时最短路有多少条, 所以当dis[to] == dis[u.to] + e[i].w; 就要更新这个记录数组, ans[to] += ans[u.to]; 就是在原先的dij进行一些小的改变即可. AC Codeconst int maxn

2018-02-02 01:05:31 408

原创 HDU 1142 A Walk Through the Forest【最短路 + dfs记忆化搜索】

传送门 // 题意: 首先给定一幅无向图(n, m), 起点是1, 终点是2, 图中两点A, B能相互到达的条件是A到终点的距离比B到终点的距离要长. 问1到2有多少种方式.// 思路: 先求出2到所有点的最短路, 然后深搜答案, dfs的过程中保存每个点的信息, 如果再次遇到某个点时他已经有路径条数的信息, 则可以直接放回答案了. AC Codeconst int maxn =

2018-02-02 01:01:15 348

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除