自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lych的博客

nothing

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

原创 bzoj3996 线性代数 最大闭权子图&最小割

将题目中的那个式子化简我们可以得到,所要求的就是Σ(i=1,n)Σ(j=1,n)[a[i]=1][a[j]=1]b[i][j] - Σ(i=1,n)c[i],这是一个经典的最大闭权子图模型,我们将其转化为:      1.S->(i,j) 容量b[i][j]      2.(i,j)->i (i,j)-> 容量inf      3.i->T 容量c[i]然后跑一遍最大流就出来了(我

2015-12-31 22:34:46 951

原创 bzoj1487 无归岛 树形dp

对于题目中的一句话:“对于同一个岛上的任意两个生物,他们有且仅有一个公共朋友,即对同一岛上的任意两个生物a和b有且仅有一个生物c既是a的朋友也是b的朋友。”,我个人以为他是说这一个岛上的点构成一个环,否则我看不懂样例中的图是怎么符合题意的。。。(果然我是语体教)那么这句话是说有x个环,这x个环又构成一个环。       这道题和bzoj1040骑士很像,不同的是这道题有多个环,而bzoj104

2015-12-27 20:40:34 820 1

原创 bzoj1023 仙人掌图 树形dp

仙人掌图的入门题(以及被入门题虐哭的我T_T),膜拜了ydc的题解,讲一下自己的看法。       在dfs树中,如果令f[x]表示x到它的叶子节点的路径中最长路径的长度,则有递推式f[x]=max{f[son]+1}。       那么我们首先考虑桥带来的影响,在以x为更节点的子树中,如果(x,y)和(x,z)都是桥且f[y]最大,f[z]其次,则答案可以更新为f[y]+f[z]+2。那

2015-12-27 20:23:13 2451

原创 bzoj1040 骑士 树形dp

类仙人掌的树形dp。对于一个联通块,一定是由一个环和若干棵树构成的。对于一个环,破环为链,设破开的点为u,v,假设u不选做一次,再假设v不选做一次。两次取较大值累加入答案即可。AC代码如下:#include#include#define N 1000005#define ll long longusing namespace std;int n,tot=1,tx,ty,tz,a

2015-12-26 22:17:43 699

原创 bzoj1990 NOIP2007 树网的核 树的直径&单调队列维护最小值

愣是没明白多条直径的中点相同有什么实际意义。。大概就是说明只要取一条直径上的核,则这个核必过中点,从而不管是那一条直径的最小偏心距都是唯一的吧。。       那么就可以写代码了。随便取一条直径,那么对于这条直径上的一个点,求出在不经过直径上的点的前提下离它最远的点,程序中记为b[i],那么对于直径上的一条链u->v,其偏心距为max{b[p],dist[u],dist[v]},其中p在u->

2015-12-26 17:01:00 642

原创 NOIP2014 bzoj3751 Day2T3 解方程 数学&hash

NOIP2014的最后一题,本来要在NOIP2015前做好的,现在终于把坑填上了。       bzoj上的数据似乎经过加强了?质数不取大似乎过不掉。       真想不明白我初二的时候看到这道题目是怎么在5s内想到去取一个模的(当然不是在考场而是在家里)       显然,若f(x)=0,则f(x)≡f(x0)≡0(mod p),其中x≡x0(0≡0(mod p),那么基本可以确

2015-12-24 21:11:20 1349 1

原创 NOIP2014 Day2T2 寻找道路 bfs

实际上也是水题。。首先从终点沿反向边将所有能到达终点的点求出来。然后枚举每个点看是否符合题目中的第一条条件。然后沿着所有满足条件的点找出最短路就行了。把一个sta达成1WA了一发。。真是没救了:#include#include#include#define N 400005using namespace std;int n,m,sta,gol,tot,fst[N],pnt[N]

2015-12-22 22:00:16 1068 1

原创 NOIP2014 Day2T1 无线网络发射器选址

模拟一下统计每个位置就行了。。AC代码如下:#include#include#include#includeusing namespace std;int m,n,a[1005],b[1005],c[1005];int main(){ scanf("%d%d",&m,&n); int i,x,y,ans1,ans2=0; for (i=1; i<=n; i++) scan

2015-12-22 21:58:45 907

原创 NOIP2014 Day1T3 飞扬的小鸟 dp

实际上是一道非常水的dp(怪不得那年分数线上了500),当时写的急了直接用dp[i][j][0]表示上一次下降和dp[i][j][1]表示上升结果WA。。没办法了只能认真分析。实际上       f[i][j]=min(min{f[i-1][j-x[i]*k]}+1,f[i-1][j+y[i]]),发现大括号内的实际上是完全背包。从而f[i][j]=min(f[i-1][j-x[i]]+1,f

2015-12-22 21:51:53 719

原创 NOIP2014 Day1T2 联和权值 数学&图论

显然,对于一个点x,如果有两条边x-y x-z,那么yz就是所要求的。实际上题目中的yz和zy算不同的(真是坑爹害得我考了long long,本来都想用2的逆了o(╯□╰)o),所以实际上是2yz。我们知道平方和展开       (Σ(i=1,n)a[i])^2=Σ(i=1,n)a[i]^2+Σ(i=1,n)Σ(j=i+1,n)2a[i]*a[j],而加号右边就是联合权值,另外两部分都是可是求

2015-12-22 21:50:58 929

原创 NOIP2014 Day1T1生活大爆炸版石头剪刀布 模拟

打个表模拟一下就好了。(似乎用0~n-1)会好写?AC代码如下:#include#includeusing namespace std;int p[5][5]={0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0};int n,cnt1,cnt2,a[205],b[205];int main(){ scanf("%d%d%d",

2015-12-22 21:46:04 1244

原创 bzoj3316 jc loves mkk 二分&单调队列

这道题目居然还要狗血的分数输出,真是卡精度,果断long double。       首先破环成链,然后二分答案x,用每一项减去x,那么如果有L~R的区间内且和大于0的这么一段存在,记录一下区间返回1就行了。       如何判断呢?其实只要用单调队列即可,如果isum[j](sum为前缀和),那么i一定不如j优,然后奇偶分开维护两个单调队列即可。AC代码如下:#include#

2015-12-22 21:43:47 2027

原创 bzoj2326 数学作业 矩阵乘法

这道题目的递推式为f(i)=f(i-1)*10^k+i,因为和i有关系,所以一开始我不知道怎么做。后来翻了题解才知道,原来可以在矩阵里把i也构造进去。构造矩阵乘法如下:       (f(i) , i , 1)=(f(i-1), i-1, 1)*((10^k , 0 , 0),(1 , 1 , 0),(1 , 1 , 1)),其中k为i的位数。然后矩阵乘法直接上就行了。注意当i=0时矩阵为(0

2015-12-20 16:46:24 910

原创 bzoj3517 翻硬币 数学

这道题网上似乎并没有找到题解啊,唉只能自己想了。       显然每个点只用翻一次,记x(i,j)表示(i,j)这一个翻不翻,同时记a(i,j)表示这一个的初始情况。简单推理可以发现全翻成0和全翻成1的方法刚好是互补的,换句话说只要求除了翻成0的步数,翻成1的步数也就可以求出来了。下面求翻成0的步数。       考虑(i,j),对它有影响的是纵坐标为j的x(u,j)和横坐标为i的x(i,

2015-12-20 07:56:58 1625 1

原创 bzoj2749 外星人 数论

一开始还以为求方程(φ(N))^x≡1的解。。后来看了半天没有发现模数。原来下面还有样例解释。。注意到解释中有一个φ(2)=1,即为这道题目的突破口。       一个显然的事实是,要消去pi这个质数,至少需要qi次。而求一次φ(x),pi就会分解出一个质因数2。而2分解以后就只剩下1了。而每次只能消去1个2,所以实际上是求能够分解出多少个2。假设对于奇数m,能分解出x个2,则显然x+1次分解

2015-12-19 17:03:18 1428

原创 bzoj2748 音量调节 背包动规

这种题也能算省选。。AC代码:#include#includeusing namespace std;int n,m,a[105]; bool dp[105][2005];int main(){ int i,x; scanf("%d%d%d",&n,&x,&m); dp[0][x]=1; for (i=1; i<=n; i++) scanf("%d",&a[i]); for (

2015-12-19 16:26:19 439

原创 bzoj3994 约数个数和 数论&莫比乌斯反演

又是结论题。有一个结论如下:       d(mn)=Σ(i|m)Σ(j|n) [gcd(i,j)=1]。       证明:设m=∏pi^ai(∏是连乘),n=∏pi^bi,允许一些ai,bi=0但不全为0。一个质因子一个考虑下来。假设这个等式对于m=∏p(i-1)^a(i-1)和n=∏p(i-1)^b(i-1)都成立,现在到了pi,设原来的d为d1,那么由约数个数公式可知,加上质因数p

2015-12-19 14:51:15 808

原创 uva11992 Fast Matrix Operations 线段树打标记

现在想起来自己好像从来都没有写过线段树lazy tag呢,唉真是惭愧。现在老师开始讲线段树了,我就被要求滚去写线段树啦。。       这道题就是区间都加上一个值;区间都变为一个值;求区间和,最大值,最小值。其中行数AC代码如下:#include#include#include#define N 500005#define inf 1000000000using namesp

2015-12-19 14:42:27 543

原创 bzoj2142 礼物 组合数学&中国剩余定理

显然多出来的物品分给另一个人,答案不变。那么答案为C(n,w1)*C(n-w1,w2)*...*C(n-w1-w2-...-wm-1=wm,wm)=n!/w1!/w2!/.../wm!。由于题目中P不是质数,所以要先分解质因数再用中国剩余定理还原答案。所以关键是求x!对pi^ai取模的值。而x!≡1*2*...*x≡(1*2*...*pi^ai)^(x/(pi^ai))*1*2*..*(x%pi^

2015-12-13 19:57:29 1436

原创 bzoj1408 robot 数论

这题面,也是醉了。题目定义了三种数,然后分别求这三种数的φ的和。其中特别的,φ(1)=0。一开始看了po爷题解,完全看不懂。。实际上就是一个简单的递推。令ans1表示政客,ans2表示军人,那么学者就是用总的减去ans1-ans2,而总和根据公式Σ(d|n)φ(d)=n实际上就是m,当然由于φ(1)=0,所以总和为m-1。于是问题就变为了求ans1和ans2。由于题中回避了质数2,所以在求ans1

2015-12-12 21:28:41 675

原创 bzoj2005 能量采集 数论

这道题目本质上就是求Σ(i=1,m)Σ(j=1,n)2*gcd(i,j)-1,该式等价于2Σ(i=1,m)Σ(j=1,n)gcd(i,j) -m*n=2Σ(d)phi(d)[m/d][n/d]-mn。然后O(N)求出phi()即可。AC代码如下:#include#include#define N 200005#define ll long longusing namespace s

2015-12-11 22:32:25 513

原创 bzoj3309 DZY Loves Math 数论

利用公式Σ(d|n)φ(d)=n,Σ(d|n)μ(d)=[n=1],将所求的化为Σ(k)[a/k][b/k]Σ(d|k)f(d)μ(k/d),令后面的为g(k),则所求的转化为Σ(k)[a/k][b/k]g(k),就可以O(N^0.5)查询了。       关键是求g(k),那么设k因式分解质因数次数分别为p1,p2,...pn,d为q1,q2,...qn,那么如果pi-qi>=2,那么μ值为

2015-12-11 20:27:49 2425

原创 bzoj3997 组合数学 递推

第一瞬间以为是网络流,看完数据范围果断弃疗。但是考虑到这个有点像对偶图转最长路。。就是求一条从左下到右上的最长路径,大概可以证明这就是最少的次数。简单的证明如下:       1.必要性。显然成立,这几个点之间不能互相到达,至少需要走这几个点才能全部取完。       2.充分性。反证法,假设有几个点没有被取完。那么对于每一个点,以这个点为右下角的一个矩形中所有最长路径上的点,他们走的路径

2015-12-11 20:14:47 1075

原创 bzoj1078 斜堆 推理

orz:http://www.cppblog.com/MatoNo1/archive/2013/03/03/192131.html       大意就是证明了当前的斜堆中沿着只有左子树的那条链的顶端是当前堆中最后加入的。特殊情况该节点的子节点是叶节点,则取叶节点。然后倒推即可,注意最后要加一个空格!!因为这个pe了一遍:#include#include#include#defin

2015-12-06 21:47:13 554

原创 bzoj1082 跨栏 二分&搜索

果然搜索的姿势很重要啊。首先二分答案x,那么剪下来的一定是最小的x个,然后枚举每一个从哪块上切下来就行了。有以下优化:       1.将两个数组分别排序。那么所需要的木板一定是从大到小枚举,同时枚举每一个所需要的木板时,按照提供的木板的大小从小到大枚举能不能切去,这样容易回溯。       2.对于一块提供的木板,如果其长度小于需要的最小的木板,那么剩下来的部分一定浪费了。记一个变量wa

2015-12-06 12:40:44 844

原创 bzoj2819 NIM 树上两点间抑或值

这道题目名字叫NIM实际上和博弈论几乎一点关系都没有o(╯□╰)o。题意:带修改的求树上两点间抑或值,不为0输出"Yes"否则输出"No"。       如果我们用f[x]表示x到根节点的抑或值的话题目就转化为求f[x]^f[y]^a[lca(x,y)],这样就给我们修改提供了一种可能,因为修改一个x只会对x的子树中的点产生影响,即有f[z]^=v(v为修改的值且z为x子树中包括x一点)。首先

2015-12-05 20:38:20 610

原创 bzoj2281 黑白棋 博弈论

这道题目的转化真是巧妙啊。不过据说题目有点问题,那就不管了。首先将第i个白子和第i个黑子组成一对。那么这一对中,白子的左移是没有意义的,黑子的右移也是没有意义的(虽然有反例,但好像只能这样了)。那么每一对黑子和白子可以看成一堆火柴,则问题转化为一次在d堆中拿火柴的必胜策论。       对于d-Nim(就这么叫了)问题,有个结论是如果对于二进制的每一位的抑或值x都有x≡0(mod d+1),那

2015-12-05 10:51:38 1398

原创 bzoj1188 分裂游戏 博弈论

这道题目子游戏居然是一个石子,涨姿势了。果然写第一道sg就被完杀Q_Q。       定义子游戏sg(x)表示x中的一个石子的sg值。由于一堆狮子中每一个石子都是独立的,所以这一堆(设有a[i])作为一个子游戏的值即a[i]&1 * sg(i)。由于这一个石子变成了另外两个石子,所以这个子游戏的后续状态值就是另外两个子游戏的亦或。表达实在不好,。。。自己体会吧。下附AC代码:#incl

2015-12-04 20:02:45 463

原创 bzoj1093 最大半连通子图 强连通分量&记忆化搜索

由于要使点最多,所以同一个强连通分量中的点要么都选,要么都不选。然后tarjan缩点,新点的权值为该强连通分量中点的个数。然后在新的DAG上求一条最长的链并统计最长链的个数即可。记忆化搜索解决(当然也可以bfs顺推然而我懒-_-。下附AC代码:#include#include#include#include#define N 100005#define M 1000005usi

2015-12-04 19:56:52 476

原创 bzoj1086 王室联邦 dfs

看到题目完全不会做的样子。为什么是于是果断翻题解。       意料之外情理之中。一遍dfs即可。注意到以x为根节点时,其儿子s,则子树s中与s相连的节点的连通块,如果要构成一个省,既可以s作为省会还可以x作为省会。如果用s作为省会,那s的子树       考虑操作。显然这需要一个栈来维护,每次回去之前将x加入栈里面。然后栈中在当前树中的节点超过b个时就将这b个放到一个省里。代码还

2015-12-03 20:15:11 1503

原创 bzoj2561 最小生成树 最小割

这道题目的做法有点神奇啊。。居然是用网络流。数据范围20w有点吓人啊。表示这种题目根本想不到是网络流,但告诉你是最小割还是恍然大悟的。       以最小生成树为例。把所有小于L的边取出来,显然这些边不能连通u和v,否则将u和v连起来在环上去掉L显然更小。所以求一个最小割就行了。最大生成树同理,两者相加就是答案。       然而网络流20w显然恐怖啊,后来翻lrj的书写的dinic对于容

2015-12-01 21:05:56 1764 1

空空如也

空空如也

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

TA关注的人

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