摘要:发一道老早写的题。 1 #include<iostream> 2 #include <algorithm> 3 using namespace std; 4 int a[65]; 5 bool use[65]; 6 int n,m,len; 7 int cmp(int a, int b) 8 { 9 return a > b;10 }11 bool dfs(int i,int sum,int j)12 {13 int k,temp,x;14 if(j==m) return 1;15 else if(sum==len) return dfs(1,0,j+1)...
阅读全文
摘要:题意:一个有向图称为半连通的(Semi-Connected),如果满足:,即对于图中任意两点u,v, 存在一条u到v的有向路径或者从v到u的有向路径。若满足,则称G’是G的一个导出子图。若G’是G的导出子图,且G’半连通,则称G’为G的半连通子图。若G’是G所有半连通子图中包含节点数最多的,则称G’是G的最大半连通子图。给定一个有向图G,请求出G的最大半连通子图拥有的节点数K,以及不同的最大半连通子图的数目C。由于C可能比较大,仅要求输出C对X的余数。思路:强连通分量缩点 DP 1 #include<iostream> 2 #include<cstdio> 3 #inc
阅读全文
摘要:题意: 举办IOI2011 的同时,pattaya 还在举办2011 年国际奥林匹克长跑比赛(IOR)。作为东道主,我们需要找到最佳比赛线路。 在Pattaya-Chonburi 范围内有N 个城市,它们通过N-1 条双向的高速公路相互连通,每条高速公路的长度是一个整数(单位:公里),它连接2 个不同的城市。注意:连接任何两个城市之间的路径有且仅有一条,即只有一条路径从一个城市到另一城市,该路径由一系列的高速公路组成,且路径上的任何一个城市都只能经过一次。 IOR 要求的比赛线路是一条总长度为K 公里的路径,且该路径的起点城市和终点城市不同。任何一条高速公路只可能在比赛线路上出现一次,任...
阅读全文
摘要:题意:阿Q博士正在观察一个圆形器皿中的粒子运动。不妨建立一个平面直角坐标系,圆形器皿的圆心坐标为(x0, y0),半径为R。器皿中有若干个粒子,假设第i个粒子在时刻0的位置为(xi, yi),速度为(vxi,vyi)(注:这是一个速度向量,若没有发生碰撞,t时刻的位置应该是(xi + t * vxi, yi + t * vyi) )。假设所有粒子的运动互不干扰;若某个粒子在某个时刻碰到了器皿壁,将发生完全弹性碰撞,即速度方向按照碰撞点的切线镜面反射,且速度大小不变(如图)。认为碰撞是瞬间完成的。尽管碰撞不会影响粒子的速率,但是粒子却会受到一定的伤害,所以若某一个粒子碰撞了k次器皿壁,那么在第k
阅读全文
摘要:【问题描述】 L公司有N个工厂,由高到底分布在一座山上。如图所示,工厂1在山顶,工厂N在山脚。 工厂i目前已有成品数量Pi; 由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用。突然有一天,L公司的总裁L先生接到气象部门的电话,被告知三天之后将有一场暴雨,于是L先生决定紧急在某些工厂建立一些仓库以免产品被淋坏。 由于地形的不同,在不同工厂建立仓库的费用可能是不同的。第i个工厂目前已有成品Pi件,在第i个工厂位置建立仓库的费用是Ci。对于没有建立仓库的工厂,其产品应被运往其他的仓库进行储藏,而由于L公司产品的对外销售处设置在山脚的工厂N,故产品只能往山下运(即..
阅读全文
摘要:题意:给一棵树,树上的节点黑白染色,初始时全黑。每次操作可以改变一个节点的颜色,或者查到某点最近的白点距离。 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 #define NMAX 100010 9 struct node 10 { 11 int num; 12 node *next;
阅读全文
摘要:题意:给一棵有边权树,树上的节点黑白染色,初始时全白。每次操作可以改变一个节点的颜色,或者查询最远的两个白点的距离。思路:同zjoi 2007 hide 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 #define NMAX 100010 9 struct node 10 { 11 in
阅读全文
摘要:题意:捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子。某天,Jiajia、Wind和孩子们决定在家里玩捉迷藏游戏。他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条走廊的分布使得任意两个屋子都互相可达。 游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这N个屋子的灯。在起初的时候,所有的灯都没有被打开。每一次,孩子们只会躲藏在没有开灯的房间中,但是为了增加刺激性,孩子们会要求打开某个房间的电灯或者关闭某个房间的电灯。为了评估某一次游戏的复杂性,Jiajia希望知道可能的最远的两个孩子的距离(即最远的两个关灯房间的距离)。 我们将以
阅读全文
摘要:题意:给你N和M,对于一个N*M的单面方格纸你可以对它的每个个格子黑白染色,然后把方格纸的长边卷起来,卷成一个圆柱体,然后再把两个短边形成的圆也接起来,形成一个游泳圈的形状(我们染的色只在游泳圈的外表面)。如果对于两种黑白染色方案,通过卷成这样的游泳圈后,是一样的,则这两种方案也是一样的。给定N,M<=20 ,求染色方案总数.思路:polya定理.当n!=m时,每一列上下可以滚动,每一行左右可以滚动,整个游泳圈可以上下倒置(也就是把游泳圈翻过来,明显此时左右也倒置了),所以总共有N*M*2种置换;当n=m时,游泳圈不存在长边与短边,所以你可能第一次是把行卷成圆柱,也可能是先把列卷成圆柱,
阅读全文
摘要:题意:有n种糖果,第i种糖果有mi个,求吃掉至少a个,不超过b个糖果的方案数模2004。数据规模:n ≤ 10;mi≤ 10^6; a ≤ b ≤ 10^7思路:原题可转化为不等式 xi≤mi a≤Σxi≤b 的解的个数可新建一个变量 xn≤b-a则可变为 xi≤miΣxi=b因为n非常小 容斥原理求解 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 #define mod 2004 7 i
阅读全文
摘要:题意: 有一个N个顶点的无向图,N个顶点编号为1~N。点i与点j之间有一条无向边当且仅当|i-j|<=k,求这个无向图的生成树个数mod 65521的值。思路:以连续k个点的连通情况作为状态 1 #include<iostream> 2 #include<map> 3 #include<string> 4 using namespace std; 5 #define mod 65521 6 long long n; 7 int m,t,top; 8 map <int,int> home; 9 struct matrix 10 { 11 lo
阅读全文
摘要:题意:给定一棵边带权的树,求多少对点之间的距离小于k 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 #define NMAX 10010 8 struct node 9 {10 int num,weight;11 node *next;12 };13 node *graph[NMAX];14 node memo[2*NMAX];15
阅读全文
摘要:题意:给定一棵树,每个节点颜色是黑色或者是白色。初始时,全白。定义两种操作0 i 改变第i个节点1 v 询问从1到v的路径上,第一个黑节点 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 using namespace std; 6 #define MAXN 100010 7 #define INF 987654321 8 struct node 9 { 10 int r; 11 node *next; 12 }; 13 struct
阅读全文
摘要:题意:给定一棵边带权树定义两种询问DIST a b: a b之间距离KTH a b k: a b之间的路径的第k个数 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 using namespace std; 6 #define MAXN 10010 7 struct node 8 { 9 int num,weight; 10 node *next; 11 }; 12 node *graph[MAXN]; 13 node memo[2*M
阅读全文
摘要:树链剖分 模板题 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 using namespace std; 6 #define MAXN 10010 7 #define INF 987654321 8 struct tree_node 9 { 10 int left,right; 11 int num; 12 }; 13 struct node 14 { 15 int r,id; 16 node *next; 17 }; 18 nod.
阅读全文