摘要:详情请看:唐文斌在国家冬令营的讲课 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 #include<ctime> 7 using namespace std; 8 #define MAXN 210 9 #define MAXM 11000 10 const long long INF=10000000000000000ll; 11 long long ans=INF; 12
阅读全文
摘要:题意:求一棵树的最小支配集思路:dpdp[u][0]表示u靠自己dp[u][1]表示u靠父亲dp[u][2]表示u靠儿子v是u的儿子dp[u][0]=sigma min(dp[v][0],min(dp[v][1],dp[v][2]))+1dp[u][1]=sigma min(dp[v][0],dp[v][2]);if 存在 dp[v][0]<=dp[v][2]dp[u][2]=sigma min(dp[v][0],dp[v][2]);elsedp[u][2]=min(dp[v][0]-dp[v][2])+sigma min(dp[v][0],dp[v][2]); 1 #include&l
阅读全文
摘要:线段树水题写splay练手 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 #define MAXN 100000+100 7 struct node 8 { 9 long long sum,father,left,right,adt,cnt,num; 10 }; 11 node tree[MAXN]; 12 int top=0,n,m,root; 13 long long a[MAXN];
阅读全文
摘要:1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<vector> 6 #include<algorithm> 7 using namespace std; 8 #define MAXN 550000+100 9 #define PI 3.14159265358 10 #define EPS 1e-2 11 char a[MAXN],b[MAXN]; 12 int n,m,top=0,label=0
阅读全文
摘要:题意:求∑gcd(i, N) 1<=i <=N思路:求出所有约数欧拉函数 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 #define MAXN 10000 8 long long Div[MAXN],prime[MAXN],factor[MAXN],l[MAXN],p[MAXN]; 9 bool use[70000];1
阅读全文
摘要:题意:有一群猴子,每一只有一定的强壮值刚开始,每个人都不认识别人有m次争吵若x,y争吵如果 x认识y 输出-1如果x不认识y 则x认识的猴子中(包括自己)当前强壮值最大的和y认识的猴子中(包括自己)当前强壮值最大的决斗决斗完之后,决斗的两只猴子,强壮值减半(10->5,5->2) 且x认识的猴子和y认识的猴子都相互认识了 输出其中当前强壮值的最大值多组数据思路:左偏树 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #inc
阅读全文
摘要:题意:求无向图的严格次小生成树思路:综合前两篇文章http://www.cnblogs.com/myoi/archive/2012/05/13/2498184.htmlhttp://www.cnblogs.com/myoi/archive/2012/05/14/2500371.html 1 //严格 2 #include<iostream> 3 #include<cstring> 4 #include<cmath> 5 #include<cstdio> 6 #include<vector> 7 #include<algorith
阅读全文
摘要:题意:给一棵边带权的树有m个询问x,y 询问x到y的路径上的最长边和最短边思路:离线做用tarjan求LCA每次合并时,只把儿子往根上合并 保证并查集的某一节点的祖先也都是这个节点在树上的祖先并查集每个节点再维护一个与父亲节点的路径上的最长边和最短边 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<vector> 6 #include<algorithm> 7 using namespace s
阅读全文
摘要:题意:求无向图的最小生成树和非严格次小生成树思路:http://www.cppblog.com/MatoNo1/archive/2011/05/29/147627.aspx 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 #include<vector> 6 #include<algorithm> 7 using namespace std; 8 #define MAXM 300010 9 #define MAX
阅读全文
摘要:对于30%的测试数据,满足只有二元联系(即不存在函数依赖左边或右边的属性个数超过 1 个)。对于 40%的测试数据,满足N ≤ 5。对于 70%的测试数据,满足M ≤ 100。对于100%的测试数据,满足 1 ≤ N ≤ 10, 1 ≤ M ≤ 1000。思路:因为n非常小我们可以把2^n个关系全部列出来按照题目的关系建立有向图求强连通分量 缩点 拓扑排序答案就是 某个节点自己在头节点中,而他的真子集都不在 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstr
阅读全文
摘要:第三题区间覆盖(Interval)(Interval.pas\c\cpp)【问题描述】有N 个开区间(ai,bi),每个区间有一个权值wi,现在请你选择其中的一些区间,使得选出的区间权值总和最大,并满足数轴上的任意位置都被覆盖不超过K次。思路:最大费用最大流先离散化离散化后 第i个点和i+1个点连一条容量为K,费用为0的边对于每个区间 ai到bi连一条容量为1 费用为wi的边费用流求之 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #
阅读全文
摘要:题意:现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) 3:(x,y)<==>(x+1,y+1) 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(
阅读全文
摘要:、 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 #define MAXN 20 7 int n,T,m,p; 8 int a[20]; 9 int factorial[100001],rev[100001];10 void init()11 {12 int i;13 factorial[0]=1;14 for(i=1;i<p;i++)15 factorial[i]=(long lo
阅读全文
摘要:思路:ak第i位是1 本质就是 akmod(2^(i+1))属于[2^i,2^(i+1)-1]开16个线段树P.S. 答案可能会爆int 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 struct node 7 { 8 int left,right,num; 9 };10 node tree[17][1<<18];11 int a[17][1<<16];12 int
阅读全文
摘要:题意:秦腾与教学评估在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估。在教学评估期间,同学们被要求八点起床,十一点回宿舍睡觉,不准旷课,上课不准迟到,上课不准睡觉……甚至连著名的北大三角地也在教学评估期间被以影响校容的理由被拆除。这些“变态”规定令习惯了自由自在随性生活学习的北大同学叫苦不迭。 这一天又到了星期五,一大早就是秦腾最不喜欢的高等代数课。可是因为是教学评估时期,不能迟到,于是他在八点五分的时候挣扎着爬出了宿舍,希望能赶快混进在八点钟已经上课了的教室。可是,刚一出宿舍楼门他就傻眼了: 从宿舍到教学楼的路上已经站满了教学评估团的成员。他们的目的就是抓住像他这样迟到的学
阅读全文
摘要:题意:小 C 刚学了辗转相除法,正不亦乐乎,这小 P 又出来捣乱,给小 C 留了个 难题。 给 N 个数,用 a1,a2…an来表示。现在小 P 让小 C 依次取数,第一个数可以 随意取。假使目前取得 aj,下一个数取ak(k>j),则ak必须满足gcd(aj,ak)≥L。 到底要取多少个数呢?自然是越多越好! 不用多说,这不仅是给小 C 的难题,也是给你的难题。思路:类似最长上升子序列建一个num[1000000]数组 表示当前是x的倍数的数最多能取num[x]个 1 #include<iostream> 2 #include<cmath> 3 #include
阅读全文
摘要:题意:Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平。而后,Koishi恢复了读心的能力……如今,在John已经成为传说的时代,再次造访那座岛屿的人们却发现Koishi遇到了新麻烦。这次她遇到了Flandre Scarlet——她拥有可以使用禁忌魔法而不会受到伤害的能力。为了说明什么是禁忌魔法及其伤害,引入以下概念:1.字母集A上的每个非空字符串对应了一个魔法。其中A是包含了前alphabet个小写字母的集合。2.有一个集合T,包含了N个字母集A上的字符串T中的每一串称为一个禁忌串(Taboo string)3.一个魔
阅读全文