自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猿的进化

ACM~java~web~密码学

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

原创 hdu6171 双向bfs

传送门 题意:给一个金字型塔的数列,第一行一个0,第二行两个1,。。。第6行6个5,现在金字塔数字打乱了,你只能移动0这个数字,只能向左上右上左下右下走,问在20步内能否回到原来状态。 一共21个数,每个有6种状态,没办法用一个 [21][6]维的数组记录状态,所以我们要用Hash记录状态,每个位置6种状态,那么最大是6^21的数字,long long可以存的下的。我们用bfs进行搜索,给两个起

2017-08-25 13:25:59 438

转载 hdu6141 最大树形图+权值编码

传送门 大佬写的太好了,拿来分享,希望大佬不要生气 题意:给定一个有向图,求以1为根节点的最大树形图是多少并且输出n号节点的父亲节点(父亲节点字典序需要最小)。n是节点数目,m是边的数目。分析:首先,这里求的是最大树形图,我们可以将所有边的权值乘以-1,然后根据最小树形图算法,求出最小树形图的权值和,再乘回-1就是该有向图的最大树形图权值。但是这样是求不出n号节点的最小字典序父亲节点的,朱刘算法

2017-08-23 21:17:53 501

原创 hdu6166 最短路

传送门 题意:在一个有向图中,选出K个点,问任意两个点的最短距离中 最小的那个是多少。 因为K太大了,不能枚举任意两个点的距离,所以需要一些技巧,分组!,将所有点分成两组,设为A,B组,那么我们用优先队列求解,初始把所有A组点加入队列,以远离初始点距离最短的优先,A组中所有点一旦走到B组任意一个点,便找到了从A组到B组的一条最短路,我们要做的关键地方是分组,如何使得任意两个点都有一次机会不在同一

2017-08-23 16:36:48 538

原创 hdu6162 LCA

传送门 题意:给一棵树型图,每个节点代表一个城市,每个节点有一个礼物,售价ci元,问从一个点到另一个点,走最短路,买尽量多的礼物,并且不能买低于l元的也不能买高于r元的礼物,至少准备多少钱。 因为是一棵树,求两个点的最近公共祖先,把路过的点适合来买的礼物的权值加起来就可以了。#include <set>#include <map>#include <stack>#include <queu

2017-08-23 13:54:24 350

原创 hdu6156 数位dp

传送门 求K进制下回文数字个数,用一个数组记录每一位的数字,当跑到比中间位靠右时比较是否和对称位置相同即可,数组开全局,dfs之前进行赋值即可,是回文数字,权值是k否则是1,所以结果要加上1的部分。#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;

2017-08-21 20:07:04 400

原创 hdu6148 数位dp

传送门 题意:求区间内 数字是V型 的数字个数,这是套路题,dp[i][j][k],表示第i位前一位是j状态位K的数字个数,这基本都是套路,状态k就两种,1表示递增,0表示非递增,然后其他 的都是套路的东西,dfs(int pos,int pre,int sta,int limit),pos当前位,pre上一位的值,sta K的状态,limit 上一位是否是 上界,每次根据sta的状态来跑,sta

2017-08-21 20:02:32 419

原创 hdu6121

传送门 题意:给一颗n个节点的K叉树,问所有节点的大小(就是孩子个数)亦或值值多少。 思路:根据n ,k,设有i+1层,可以知道最底层的节点个数为m=n-(k^0 - k^1 - k^2 -…..-k^(i-1) ),那么最后一层第m个点是特殊点,我们找一条0到该点的路径,这条路径很关键, 看12–5–2–0这条路径,从底层看,12号点左侧的点孩子个数都是1,12号点孩子个数为1,12

2017-08-16 19:03:39 353

原创 hdu6127 思维

传送门 题意:有 n 个点,每个点有个权值,点与点之间可以连成线段,线段的权值就是两个端点的权值乘积。任意两个点与原点不可能在一条直线上,求一条直过原点的直线线穿过的线段的最大权值和? 思路:我们可以想到,有一条过原点的直线,那么直线穿过的线段都是由直线两侧的点互相连线组成的线段,进一步发现线段的权值和就是两侧的点权值和的乘积。有了前面的简化,我们可以对所有的点按照斜率进行排序,从最小斜率的点开

2017-08-16 18:22:17 314

原创 hdu6118 最小费用最大流

传送门 汉语题,不解释; 建图方式:建立超级源点S,超级汇点T,S指向所有点i,边的流量为i点的出货量,费用为成本,所有点i指向汇点T,流量为进货量,费用为 -收货价格,那么求一条以费用为权值的最短路时,最短路长度越小,收益会越大,因为负的就是赚的钱。 样例示意图 了解了建图,套套模板就过了啊,注意一点就是最短路小于0是才跑流量,大于等于0时结束。#include <bits/stdc+

2017-08-14 11:30:21 403

原创 hdu6115 最近公共祖先+树的重心优化

传送门 题意:汉语题目,就不说了。 比赛时不知道每个子公司的办公室时多少,但是我估计这不多,所以大胆的试了一发,结果过了,惊喜中的惊喜。 问两个子公司的最短路,因为是一棵树,所以就是两点之间的路径长度,我们只知道每个子公司的办公室在哪,我是枚举每两个办公室之间的距离,输出最小的那对距离,因为给的树肯定是不规则的,所以我求了一次 树的重心,使得树的高度变低,然后利用最近公共祖先求解距离,因为树高

2017-08-13 20:37:04 536

原创 hdu6081并查集+坑

传送门 题意:汉语的不解释。 原本以为是全局最小割,但是全局最小个是n^3复杂度,这个题20秒根本过不了。 其实这个题枚举割掉每个点所用花费就可以了,有一个坑就是输入的u,v可能相等,所以会导致大批wa。用并查集看一下是否联通, 不联通直接输出0就可以了,联通输出割掉一个点所花费最小的权值就可以了。#include <iostream>#include <stdio.h>#include

2017-08-09 20:28:42 435 1

原创 hdu6073二分图完美匹配之权值之积再求和

传送门 题意:给一个二分图,一个完美匹配的权值等于完美匹配的边的权值的乘积,求所有完美匹配权值的和,保证至少有一个完美匹配。 眼里解释:第一行为T,T组数据,然后一行为n,表示有二分图每个集合有n个点, 然后下面有n行,每行四个数,例如第i行的四个数,v1,w1,v2,w2,那么就表示 i 与v1相连,权值为w1,i与v2相连,权值为w2。即左边集合就是i,(1<=i<=n),右边集合为输入的

2017-08-09 14:59:27 381

原创 poj2288 状压dp

传送门 题意:有n个点,m条边,每个点有一个权值,求一条哈密顿回路,但是权值计算不同,包括三部分:1,经过的所有点的权值相加。2,经过的连续两个点的权值的乘积。3,能够构成三角型的连续三个点的乘积。这些全部加起来就是这条回路的总权值。输出最大权值和这个最大权值的路线有多少条。 状压dp,由于当前位置只和前两个点的位置有关,所以我们用dp[s][i][j],表示从i走到了j,目前倒数第二走到的是i

2017-08-08 10:16:47 277

原创 hdu6071神奇的最短路

传送门 题意是,有四个地点,1<->2<->3<->4<->1,是双向循环的,知道每一段的之间的长度,d12,d23,d34,d41,问题是要从2号点开始炮,最后回到2号点,问跑的总路程大于等于K米的最小值是多少。 首先我们让 w=min(d12,d23) ,那么如果存在一个合法的路程 k 必然会存在路程 k+2∗w 。让 d[x][v%(2∗w)] 表示从 2 出发到 x 点时 v=d[x][

2017-08-07 21:16:34 369

原创 hdu6064 Best theorem+Matrix-Tree定理

传送门 题意,就是给了一个有向图的邻接矩阵,问从1号点出发的欧拉回路有多少条。 求欧拉回路用到了Best theorem,其公式是这样的Best theorem 来自维基百科 tw(G)表示以w为根的生成树个数,用Matirx-Tree定理求解,可以看我的上一篇blog Matrix-Tree定理 deg(v)表示顶点v的入度(其实入度等于出度,不然构不成欧拉图)。 !表示阶乘 当

2017-08-04 18:52:06 943

原创 hdu4305Matrix-Tree理论

传送门 题意:N个机器人在那站着,一天打雷霹到一个机器人,那么距离他小于R以内的机器人都会被霹到,将霹到的机器人但是三点共线的情况只能传染最近的那个,问最后闪电击中形成的形状有多少种,也就式求无向图生成树个数。 生成树个数问题最好的方法式Matrix-Tree定理。 一, 对于无向图A表示其临界矩阵,B表示其度数矩阵,Kirchhoff矩阵H=B-A 简单的来说可以这么表示,

2017-08-04 16:35:54 398

原创 poj1185状压dp

传送门 汉语题,就不解释了。 m<=10,且炮的距离是2,那么仅仅考虑一行,0000000000—-1111111111,(1表示放,0表示不放)这些状态中最多有60个能放下炮的状态。称为可行状态S; 放置4个情况1种, 3个情况(4+3+2+1)+(3+2+1)+(2+1)+1=20, 2个情况为7+6+5+4+3+2+1=28, 放置1个为10中, 放置0个为1种,其和为60种。

2017-08-02 20:27:34 276

原创 hdu6060斯坦纳树

hdu6060 题意:给出一颗n个节点的树,要求将2-n号节点分成k部分,然后再将每一部分加上1号节点联通的最小花费,定义为每一部分的val,为其在原图上的最小斯坦纳树,问总的val最大可能是多少。把1看成整棵树的根. 问题相当于把2∼n每个点一个[1,k]的标号. 然后根据最小斯坦纳树的定义(x,fa(x) ),(x,fa(​x)​​ ) 这条边的贡献是 x 子树内不同标号的个数目dif(​i)

2017-08-02 14:45:15 517

原创 hdu6041仙人掌图

hdu6041 题意:给一个仙人掌图,f(i)为该图的第i小生成树的权值,问sum(f(i))1<=i<=k,简单说就是求前k小的生成树的权值的和。 仙人掌图有一个特点就是每条边只存在于图中的一个环中, 左图为仙人掌图,就是有点像仙人掌,有图因为两个环公用一条边,所以不能都成仙人掌图。 由于是仙人掌图,这个题就简单了,我们可以从每个环中取出一条边,那么圣剩下的就是一棵树,so,我们可以把

2017-08-02 11:40:12 346

转载 hdu6035树形dp

“真的难”系列。 首先这题肯定是算贡献,也就是计算出每种颜色参与了多少条路径,但这样正面考虑并不容易,不妨从反面考虑,计算每种颜色没有参与多少路径,然后拿 (路径总数 * 颜色总数) - 没参与的贡献,就是答案了。 对于一种颜色x,怎么计算没参与的路径数目呢,很显然,对于每个不包含颜色x的连通块中任意两点路径都是x不参与的贡献,那么问题就转化为,对于任意一种颜色x,需要求出每个不包含x的连通

2017-08-02 10:41:22 274

空空如也

空空如也

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

TA关注的人

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