05 2013 档案

摘要:可用tarjan来做。。。 1 /* 2 lca+tarjan 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue> 10 #include<map> 11 #include<math.h> 12 using namespace std; 13 typedef long long ll; 14 //t 阅读全文
posted @ 2013-05-26 14:55 xxx0624 阅读(716) 评论(0) 推荐(0) 编辑
摘要:1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在 i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决这两种问题的比较高效的算法。当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。 2.RMQ算法对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量非常大且查询很频繁时,该算法无法在有效的时间内查询出正解。本节介绍了一种比较高效的在线算法(ST 阅读全文
posted @ 2013-05-25 20:01 xxx0624 阅读(147) 评论(0) 推荐(0) 编辑
摘要:wa的代码。。纯dfs 1 /* 2 LCA 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<map>11 #include<math.h>12 #pragma comment(linker, "/STACK:16777216")13 using nam 阅读全文
posted @ 2013-05-22 21:57 xxx0624 阅读(218) 评论(0) 推荐(0) 编辑
摘要:简单LCA。。。。但是输入的时候很恶心。。。。看discuss,改了scanf才过了。。。 1 /* 2 LCA 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<map>11 #include<math.h>12 using namespace std;13 typedef 阅读全文
posted @ 2013-05-22 19:48 xxx0624 阅读(177) 评论(0) 推荐(0) 编辑
摘要:简单的LCA。。。dfs里fa的判断很重要呀。。。亲。。。 1 /* 2 LCA 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<map>11 #include<math.h>12 using namespace std;13 typedef long long ll;14 阅读全文
posted @ 2013-05-22 18:58 xxx0624 阅读(218) 评论(0) 推荐(0) 编辑
摘要:有向边!!! 1 #include<stdio.h> 2 #include<string> 3 #include<map> 4 #include<stdlib.h> 5 #include<iostream> 6 #include<algorithm> 7 #include<math.h> 8 using namespace std; 9 const int maxn = 200005; 10 struct node{ 11 int from,to,next,val; 12 }edge[ maxn<< 阅读全文
posted @ 2013-05-22 18:36 xxx0624 阅读(280) 评论(0) 推荐(0) 编辑
摘要:最近总觉得什么都忘了,什么都忘了。。。只好一遍又一遍的复习复习再复习。。。拓扑排序:拓扑排序是一种有向无环图的排序表示,表示顶点的出现顺序。如果有环 则无法表示。算法的关键在于:每次取出一个度为0的顶点(若同时存在多个0度节点,则表示该拓扑排序不唯一),记为S。然后把和S相连的点的度都减1.......重复该过程 即可得到答案。(如果点的个数比较小 可以暴力的写 即两重FOR循环搞定;要么就是用队列,把度为0的点入队。。。)恩。。。好像就这些了。。。 阅读全文
posted @ 2013-05-22 17:59 xxx0624 阅读(158) 评论(0) 推荐(0) 编辑
摘要:在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kosaraju算法或Tarjan算法,两者的时间复杂度都是O(N+M)。本文介绍的是Tarjan算法。[Tarjan算 阅读全文
posted @ 2013-05-22 17:51 xxx0624 阅读(492) 评论(0) 推荐(0) 编辑
摘要:题意是个大坑。。。只要,保证有且只有一个人的入度是0,就yes。。 1 #include<stdio.h> 2 #include<string> 3 #include<map> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 2005; 8 int ind[ maxn ]; 9 struct node{ 10 int u,next; 11 }edge[ maxn*2000 ]; 12 int cnt,head[ m 阅读全文
posted @ 2013-05-21 23:47 xxx0624 阅读(213) 评论(0) 推荐(0) 编辑
摘要:先判断是否存在环。。然后dfs出每个人比几个人要求高。。 1 ///* 2 //拓扑 3 //*/ 4 #include<stdio.h> 5 #include<string.h> 6 const int maxn = 10105; 7 int ind[ maxn ],add[ maxn ],vis[ maxn ]; 8 struct node{ 9 int u,next;10 }edge[ maxn<<2 ];11 int cnt,head[ maxn ];12 void init(){13 cnt = 0;14 memset( add,0,sizeof( 阅读全文
posted @ 2013-05-21 23:45 xxx0624 阅读(293) 评论(0) 推荐(0) 编辑
摘要:1 /* 2 用线段树不会写 3 4 dp 5 l[ i ]:表示左边>=h[i]的位置pos 6 */ 7 #include<stdio.h> 8 #include<algorithm> 9 using namespace std;10 typedef long long int64;11 const int maxn = 100005;12 int64 h[ maxn ],l[ maxn ],r[ maxn ];13 int main(){14 int n;15 while( scanf("%d",&n)==1 ){16 if( n 阅读全文
posted @ 2013-05-21 14:31 xxx0624 阅读(286) 评论(0) 推荐(0) 编辑
摘要:树这个数据结构内容真的很多,上一节所讲的二叉堆,其实就是一颗二叉树,这次讲的左偏树(又叫“左翼堆”),也是树。二叉堆是个很不错的数据结构,因为它非常便于理解,而且仅仅用了一个数组,不会造成额外空间的浪费,但它有个缺点,那就是很难合并两个二叉堆,对于 “合并”,“拆分”这种操作,我觉得最方面的还是依靠指针,改变一下指针的值就可以实现,要是涉及到元素的移动,那就复杂一些了。左偏树跟二叉堆比起来,就是一棵真正意义上的树了,具有左右指针,所以空间开销上稍微大一点,但却带来了便于合并的便利。BTW:写了很多很多的程序之后,我发觉“空间换时间”始终是个应该考虑的编程方法。:)左偏左偏,给人感觉就是左子树的 阅读全文
posted @ 2013-05-21 13:01 xxx0624 阅读(202) 评论(0) 推荐(0) 编辑
摘要:本来是简单题,不过就是题意难理解一点。。。对于两个数能相加 要保证每一位上相应位置上至少有一个0。 1 /* 2 水题不水 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue> 10 #include<map> 11 #include<math.h> 12 using namespace std; 1 阅读全文
posted @ 2013-05-20 23:38 xxx0624 阅读(153) 评论(0) 推荐(0) 编辑
摘要:题意:给定一些点,这些点本身有价值,并且可以同过某些点转化到自身。对于lev问题,可以进行枚举出每个点的lev,看哪些点与当前被枚举点是可以相互到达的。这样就解决了点点之间是否可以相互到达问题。对于路的权值问题,可以稍微进行转化,在更新dis的时候可以明白。dis[ j ] = min( dis[ j ],dis[ k ]+mat[ k ][ j ] ); //mat[ k ][ j ]:表示k到j的路径花费值 1 /* 2 dijkstra 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdl 阅读全文
posted @ 2013-05-20 22:47 xxx0624 阅读(238) 评论(0) 推荐(0) 编辑
摘要:http://www.docin.com/p-540438846.html该定理链接。 1 /* 2 havel-hakimi定理 3 http://www.docin.com/p-540438846.html 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 using namespace std;14 typedef long long ll;15 //typedef __int64 int64;16 const int maxn = 24;17 co 阅读全文
posted @ 2013-05-20 21:37 xxx0624 阅读(342) 评论(0) 推荐(0) 编辑
摘要:View Code 1 import java.util.*; 2 import java.math.*; 3 import java.text.*; 4 import java.io.* ; 5 6 public class Main{ 7 public static void main( String args[] ){ 8 BigInteger n,m,tq; 9 Scanner cin = new Scanner(new BufferedInputStream(System.in)); 10 while( cin.hasNex... 阅读全文
posted @ 2013-05-09 20:18 xxx0624 阅读(165) 评论(0) 推荐(0) 编辑
摘要:和以前的背包方程有点不同。注意:一张支票上可能有多个可能相同的项目这是AC的代码。View Code 1 /* 2 首先dp[i][j]:表示从前i个中选择j个,则转移方程为: 3 dp[i][j] = max( dp[ i-1 ][ j ](不选),dp[ i-1 ][ j-1 ]+val[i](选) ); 4 5 一开始用dp[ i ][ j ]:表示从前i个中选某些个得到不超过j的最大值,发现过不了。。。只好看别人代码。。。 6 */ 7 8 #include<stdio.h> 9 #include<string.h>10 #include<stdlib.h 阅读全文
posted @ 2013-05-09 18:30 xxx0624 阅读(289) 评论(0) 推荐(0) 编辑
摘要:View Code 1 /* 2 dp[ i ]:偷钱i而不被抓的最大概率(因为要使得被抓的概率最小) 3 开始想把dp[i]定义为概率为i的最大价值,因为把i放大了100,不过还是不够。 4 然后看题解才明白要转化,dp[i]:偷i这么多钱的最大不被捕的概率,也就是不被抓的最小概率 5 */ 6 #include<stdio.h> 7 #include<string.h> 8 #include<algorithm> 9 using namespace std;10 const int maxn = 10015;11 double dp[ maxn ];12 阅读全文
posted @ 2013-05-08 19:25 xxx0624 阅读(211) 评论(0) 推荐(0) 编辑
摘要:带权的并查集View Code 1 /* 2 带权值的并查集 3 ps:对于两个不在同一个集合里面的两个元素,把父节点接在一起即可 4 */ 5 #include<stdio.h> 6 #include<string.h> 7 #include<stdlib.h> 8 #include<algorithm> 9 #include<iostream>10 #include<queue>11 #include<map>12 #include<math.h>13 using namespace std;1 阅读全文
posted @ 2013-05-08 15:25 xxx0624 阅读(348) 评论(0) 推荐(0) 编辑
摘要:简单题。明白闰年是什么。。View Code 1 /* 2 简单题 3 闰年的判断: 4 year%4==0&&(year%100!=0||year%400==0) 5 */ 6 #include<stdio.h> 7 #include<string.h> 8 #include<stdlib.h> 9 #include<iostream>10 #include<queue>11 #include<stack>12 #include<algorithm>13 #include<map> 阅读全文
posted @ 2013-05-07 18:24 xxx0624 阅读(301) 评论(0) 推荐(0) 编辑
摘要:安装上ubuntu系统后,第一次登陆该系统后才能设置ubuntu系统的root权限,下面为操作步骤:在终端中输入:venus@venus-laptop:~$ sudo passwd rootEnter new UNIX password: (在这输入你的密码)Retype new UNIX pass... 阅读全文
posted @ 2013-05-07 17:40 xxx0624 阅读(1371) 评论(2) 推荐(0) 编辑
摘要:虽然题意简单,但是注意的细节还是不少。1、必须满足能刚好付这么多钱。2、尽可能先把1毛的用完3、在2的基础上把5毛的用完4、用10的时候,保证sum是10的倍数,否则先去掉5个1毛,没有1毛再去5毛。。。View Code 1 #include<stdio.h> 2 int main(){ 3 int sum,x1,x5,x10; 4 int a,b,c; 5 while( scanf("%d%d%d%d",&sum,&x1,&x5,&x10)!=EOF && ( sum||x1||x5||x10) ){ 6 a 阅读全文
posted @ 2013-05-05 19:47 xxx0624 阅读(313) 评论(0) 推荐(0) 编辑
摘要:《转》Know Thy Complexities!Hi there! This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science. When preparing for technical interviews in the past, I found myself spending hours crawling the internet putting together the best, average, and worst case comp 阅读全文
posted @ 2013-05-05 12:53 xxx0624 阅读(177) 评论(0) 推荐(0) 编辑
摘要:《转》今天发短信问了下,已悲剧。。。最近一个月来微软,腾讯,百度接连倒在技术面的最后一面上,基本上dream公司都过去了,不想说什么了,有点失落。。。直接奉上面经吧,希望都后来人有帮助,百度商务搜索部真的是个很不错的地方,这次没有缘分,希望以后能进。一个月前投的百度商务搜索部实习职位,一直都没有音信,差不多都忘了,结果周一接到电话说让过去面试,好吧,终于轮到我这个备胎了。约了周三过去,下面奉上面经。 十一点到了百度大厦,确实气派,水榭楼台,茂林修竹,而且前台都是帅哥美女。登记后就被面试官带到五楼,一面是一位说话声音很小的小哥,很客气,寒暄之后,开始轰炸。因为投的是检索岗位,就问了一下对搜索引擎 阅读全文
posted @ 2013-05-04 23:48 xxx0624 阅读(272) 评论(0) 推荐(0) 编辑
摘要:为什么暴力过不了这题。。。AC代码View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 struct tree{ 5 int lev; 6 tree* next[2]; 7 }; 8 tree root; 9 10 void build( char str[] ){11 int len = strlen( str );12 tree *p = &root;13 tree *tmp;14 for( int i=0;i<len;i++ ){15 ... 阅读全文
posted @ 2013-05-04 16:52 xxx0624 阅读(133) 评论(0) 推荐(0) 编辑
摘要:水题不解释。。。View Code 1 /* 2 简单题 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<vector>11 #include<map>12 #include<math.h>13 typedef long long ll;14 //typedef 阅读全文
posted @ 2013-05-04 16:51 xxx0624 阅读(241) 评论(0) 推荐(0) 编辑
摘要:最小生成树。。。。View Code 1 /* 2 prim 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<vector>11 #include<map>12 #include<math.h>13 typedef long long ll;14 //typed 阅读全文
posted @ 2013-05-04 16:49 xxx0624 阅读(269) 评论(0) 推荐(0) 编辑
摘要:View Code 1 #include<stdio.h> 2 const int maxn = 105; 3 int sum[ maxn ],num[ maxn ],p[ maxn ]; 4 int dp[ maxn ]; 5 int min( int i,int j ) { 6 return i>j?j:i; 7 } 8 int main(){ 9 int ca;10 scanf("%d",&ca);11 while( ca-- ){12 int n;13 scanf("%d",&n);14 sum[ 0 ]... 阅读全文
posted @ 2013-05-04 16:48 xxx0624 阅读(225) 评论(2) 推荐(0) 编辑
摘要:找规律题。只要分析到4步的时候差不多规律就出来了。其次就是大整数!!!!!!!!!View Code 1 import java.util.*; 2 import java.math.*; 3 import java.text.*; 4 import java.io.* ; 5 6 public class Main{ 7 public static void main( String args[] ){ 8 Scanner cin = new Scanner(new BufferedInputStream(System.in)); 9 BigIn... 阅读全文
posted @ 2013-05-03 15:41 xxx0624 阅读(245) 评论(0) 推荐(0) 编辑
摘要:唉。。看题解过的。。。View Code 1 /* 2 题意: 3 给定n个人,求组队的方法数。 4 关键:首先要分情况,1个队,2个队,3个队。。。 5 递推: 6 a[ i ][ j ]:前i个人分成j个队的方法数。 7 a[i][j] = a[i-1][j-1](第i个人自成一队)+a[i-1][j]*j(第i个人加入了j个队中的某个队); 8 */ 9 #include<stdio.h>10 #include<string.h>11 #include<stdlib.h>12 #include<algorithm>13 #include&l 阅读全文
posted @ 2013-05-03 15:04 xxx0624 阅读(227) 评论(0) 推荐(0) 编辑