上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页
摘要: 很经典的一道欧拉函数题;题意的主要意思就是: 给定一个n,让你求与n互质的数的个数,由于n比较大,一般的方法是行不通的,这时就用到了欧拉函数!欧拉函数:在数论中,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。φ函数的值通式: φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 (注意:每种质因数只一个。比如12 阅读全文
posted @ 2011-07-23 20:54 奋斗青春 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 和上一篇博客介绍的那题的一样的,简单的树形DP;题意:给你一棵树,然后让你找到这样的一些点,这个点去掉后,分割出来的子树的个数都小于等于 N/2代码:View Code 1 # include<stdio.h> 2 # include<string.h> 3 # define N 10005 4 struct node{ 5 int from,to,next; 6 }edge[2*N]; 7 int head[N],tol,visit[N],val[N],n; 8 void add(int a,int b) 9 {10 edge[tol].from=a;edge[tol 阅读全文
posted @ 2011-07-23 11:08 奋斗青春 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 很纠结的一道题啊,看起来很简单,一写起来就各种搞不定!!!开始没怎么想就写代码了,我的思路:建立有向图,正着搜一遍,反正搜一遍,两次dfs,最后把两个结果相融合起来,但是最后不好处理,导致各种搞不定,真杯具!!上网搜了一个代码,超简单,看了一下就明白了,以后做题一定要先把思路理清晰,不能急着敲代码!题意:思路:找平衡点,用dfs遍历没个节点,求出该节点的子树中有多少个节点,若有多个孩子则记录最大的子树的节点的个数保存到一个数组中,即该数组是保存着以该节点为根的树的平衡数,然后找这个数组的中最小的平衡数,并记录该节点。不再多做解释,代码一看就懂了!代码:View Code 1 # include 阅读全文
posted @ 2011-07-23 10:18 奋斗青春 阅读(683) 评论(0) 推荐(0) 编辑
摘要: 原来一直没去学spfa,感觉只一个Dij已经很够用了,昨天翻了一下最短路,如果路径中存在负权的话,Dij也只能素手无策,这时spfa就大显身手了。。实现过程:我们用数组d记录每个结点的最短路径估计值,而且用邻接表来存储图G。我们采取的方法是松弛:设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列中,就将v点放入队尾。这样不断从队列中取出结点来进行松弛操作,直至队列空为止。这道题很明显的最短路,分别用两个版本写了下。spfa:View Code 1 # i 阅读全文
posted @ 2011-07-22 08:33 奋斗青春 阅读(657) 评论(0) 推荐(1) 编辑
摘要: 一道很简单的树形DP,果断不解释,直接贴代码:# include<stdio.h># include<string.h># define N 6005struct node{ int from,to,next;}edge[2*N];int head[N],tol,visit[N],val[N],degree[N],dp[N][3];void add(int a,int b){ edge[tol].from=a;edge[tol].to=b;edge[tol].next=head[a];head[a]=tol++;}int max(int a,int b){ return 阅读全文
posted @ 2011-07-22 08:24 奋斗青春 阅读(796) 评论(0) 推荐(0) 编辑
摘要: 刚开始没看明白题意,以为只是强联通,题上的测试实例都没能看明白!!后来看明白了,不过没想到强联通缩点之后用什么方法求,也有想到过二分匹配,不过没怎么想就把它给排除了,50000个点啊,二分匹配能受的了吗!!同学做出来后告诉我们是二分匹配,当时第一反应就是这题数据相当弱!!!后来敲了下代码,发现如果数据不是很强的话,二分匹配果然可行,最后等于求最小路径覆盖=(顶点数 - 最大匹配数);题目上说的很清楚,What’s more, for each pair of city (u, v), if there is one way to go from u to v and go from v to 阅读全文
posted @ 2011-07-20 20:55 奋斗青春 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 貌似是很经典的树形dp问题,应该说是树形dp的入门!!感觉树形dp比背包多了一个辅助数组,背包直接一个数组循环下去,而树形dp因为有分支,不是线性的,所以就需要用一个辅助数组来进行转化最优情况!1011 题目大意:一棵树,有n个结点,每个结点有v个bug,有w的brain。我从1号结点开始走,带着m个战士。1个战士可以消灭20个bugs,如果我把某个结点的所有bug都消灭了我就能得到那个结点的brain。如果想攻击当前结点,那么必须先攻击了它的父结点(1号点除外)。其中当你攻占了当前结点,你可以分派人手,走向几个不同的子结点,去攻占更多。也就是说,不是单一的路径。代码: 1 # include 阅读全文
posted @ 2011-07-19 19:58 奋斗青春 阅读(2823) 评论(1) 推荐(1) 编辑
摘要: 最近两天在研究树形dp,很是郁闷啊!!今天终于完完整整的写出来一道了(一次AC),不过还是上网搜的报告,虽然如此,还是值得庆贺的~分析:/*两次遍历整棵树,一次从叶子到树根,求得以该点为根的树中节点到该点的最远距离,第二次从根到叶子进行遍历,因为每一个点到其它点的最远距离不一定在以该点为根的树中,可能在父节点的其它分支中,因此可以更新父节点到当前点的最远距离,然后比较每条分支的最远距离即可求得当前点的最远距离,这样便可以求出最后结果*/代码: 1 # include<stdio.h> 2 # include<string.h> 3 # define N 10005 4 阅读全文
posted @ 2011-07-19 16:52 奋斗青春 阅读(1119) 评论(0) 推荐(1) 编辑
摘要: 又是好长时间没写博客了,暑假集训终于还是安排了下来。这个暑假任务很艰巨,首先要把以前学过的东西重新的捡起来,还要再花一大部分的时间学习新的知识。再有三个月左右就是亚洲区域赛了,今年压力很大,要顶住压力拿银奖,RP如果再度爆发的话就冲刺Gold...废话不多说了,进入正题:这道题的意思很简单,给出一个四面体的六条棱的长度,让你求这个四面体的体积。这道题如果是放在高中的话,我想会很easy的解决,但现在"老了",这些个东西都忘的差不多了!上网偶然搜到一个课件“类似于海伦公式的四面体体积公式”:所以这道题可以直接调用这个公式,我是用1.0/2*a*b*sinc=S这个公式来求角度 阅读全文
posted @ 2011-07-17 10:40 奋斗青春 阅读(5647) 评论(5) 推荐(1) 编辑
摘要: 省赛后有一周了,这一周过的很无聊,每天课也不想上,做题吧, 也没有状态,整天过的昏昏噩噩的。。今天上午又没有去上课,在寝室没事了就想写道题。。以前看过这道题,没怎么想,感觉就是线段树。今天再一看,只有100个矩形,数据量不是很大,离散化就可以搞定。离散化+二分。。31msAC。少加了一个初始化,悲剧了n次。# include<stdio.h># include<stdlib.h># include<string.h># define N 105int col[N];int X[2*N],Y[2*N],xs,ys,adj[2*N][2*N];int cmp(c 阅读全文
posted @ 2011-05-30 13:39 奋斗青春 阅读(827) 评论(2) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页