摘要:
首先必须知道这样一个性质:同一个图的所有最小生成树等权值的边的数量相等、那么我们先求任意的一个MST、得到每个权值出现的次数(这里可以先离散化方便处理)、然后根据题目所给的很好的性质(每个权值出现不超过10次)、对每个权值用2^10枚举取边的情况、然后再看是否还存在一棵MST、复杂度大概是不到2^10*M*M/10的、、Code:#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <c 阅读全文
摘要:
POJ 1269Intersecting Lines题意很简单、判断两条直线是重合平行还是相交、如果相交输出交点、Code:#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define EPS 1e-9#define INF 1e10using namespace std;int vv;double x1,x2,x3,x4,yy1,y2,y3,y4;bool eq(double x1,double x2){ return abs(x1-x2)< 阅读全文
摘要:
POJ 2318 TOYS题意是在一个大矩形里有n条分割线把矩形分割成n+1部分、再给出一些玩具的坐标、要求统计每个部分内有多少个玩具、具体做法就是二分求解出当前玩具右方的第一条线、这可以用叉积判断、Code:var res:array [0..5002] of longint; p:array [0..5002] of record x1,x2,y1,y2:double;end; xx,yy,ldx,ldy,rux,ruy:double; n,m,i,l,r,mid:longint;function crossp(x1,y1,x2,y2:double):double; begin ... 阅读全文
摘要:
区间第K大数终极版、虽然好似可以主席树、、但是为了锻炼代码能力写了树套树、果然代码能力就是不行、不得不承认很少有人的代码会写得比我丑了、、是该改进下了、Code:#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;struct point{ int fa,lson,rson; int data,muti,size;}node[400010];char od,te;con 阅读全文
摘要:
我就不吐槽这题面确实不怎么和谐了、、直接求组合数大致是一个nlogn级别的工程、在这里显然是不可接受的、于是我们用到了lucas定理、这个定理的内容大致可以被表述为:C(A,B)与A和B分解为P进制后各对应位数的组合数的乘积对P同余、我也不会严格证明、、大致可以自己想想、、Code:#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>using namespace std;const int p=10007; 阅读全文
摘要:
【问题描述】阿米巴是小强的好朋友。 阿米巴和小强在草原上捉蚂蚱。小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难。 学过生物的阿米巴告诉小强,草原是一个极其稳定的生态系统。如果蚂蚱灭绝了,小鸟照样可以吃别的虫子,所以一个物种的灭绝并不一定会引发重大的灾难。 我们现在从专业一点的角度来看这个问题。我们用一种叫做食物网的有向图来描述生物之间的关系: 一个食物网有 N个点,代表 N 种生物,如果生物 x 可以吃生物 y,那么从 y向 x 连一个有向边。 这个图没有环。 图中有一些点没有连出边,这些点代表的生物都是生产者,可以通... 阅读全文
摘要:
(这个题目想法太神了、、我看了好多神犇的讨论才弄懂、、(鉴于我看的时候理解得很困难,我就讲详细点、要存储下所有的元素、直接放在一个树结构或者什么里面显然是不行的、、考虑第i个集合里的所有数字都不会超过i,我们从它所有儿子的号码向i连有向边最终构成的将会是一个DAG、、这样我们就可以把Ai存储为第i个点的所有前驱结点了、再考虑Bi的含义、Bi就是第i个结点的所有前驱结点Bj的交集和它自己、于是我们可以想到(其实我根本想不到),这跟ZJOI2012灾难里的灾难点有着一样的性质、(i的灾难点的定义就是删掉该点之后i成为不可达的点、具体可以参见这题的题意、定义Bi为i点的灾难点的集合,那么显然上面的含 阅读全文
摘要:
这题乍一看很没有办法下手、、、但是我们可以想到说、如果一个边有放在MST上的可能、那么权值小于它的边肯定做不出一个生成树、(这里貌似有个定理,就是说对同一个无向图的所有最小生成树对应权的边的数量对应相等,比如都有2条权为1的和一条权为2的,所以可以得到上面这个结论)那么肯定是要在权值小于它的边中删掉一些使得剩下的不能做成一个生成树、没错就是最小割、、可以这样想、对于一条边,要是MST中的一条边,必然存在一种情况下,它连接着相互之间最小边权不小于它的边权的两个连通块(……)、而对于建成的新图,如果我们不把u和v割开,那么必然不会存在上述情况、、所以两次建图求mincut(即maxflow)然后加 阅读全文
摘要:
除草向、裸SA、处理环的话就复制一遍挂在后面就好了、Code:const maxm=400001;var ch:char; s,trk,rank,sa,tsa,sum:array [0..500001] of longint; len,i,j,p,got:longint;begin {assign(input,'cipher.in'); assign(output,'cipher.out'); reset(input); rewrite(output); } len:=0; while not eoln do begin read(ch); inc... 阅读全文
摘要:
这个题目是一个弦图的经典题、先用MCS求完美消除序列然后逆序贪心染色,求一个最小染色数就可以了~Code:#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include <set> using namespace std; multiset <int> list[10001];set <int> ban[10001];int t[2000001],next[20000 阅读全文