随笔分类 -  TYVJ

摘要:这题首先一看是一个很显然的最大流模型。。但是图中有1000*1000个点,用最大流算法是无论如何都过不去的~但是不难发现,本题的模型是一张平面图,平面图上的最大流可以用最大流最小割定理转化为对偶图上的最短路问题。。把左下建成一个点、右上建成一个点,随便哪个为源点跑一次最短路就可以了。。但是本题时限还是比较紧的。。SPFA据说可过但是也许我写的太渣。。推荐dij+heap~Code:#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#include < 阅读全文
posted @ 2012-10-24 13:46 JS_Shining 阅读(259) 评论(0) 推荐(0)
摘要:嗯。这个题目本身不难,但是想法还是有一点特别的,所以发出来说一下。朴素的想法是,对每一个叶节点,算一遍整个树的费用然后比较。。但是这样是平方的。必然要跪。然后注意到一点很好玩的。就是如果任意一点确定,那么它的父亲也就确定,父亲的父亲……也就确定了。那么我们找一个大家的父亲——根节点,对每个叶节点计算保持它不改的时候根节点的工资,然后统计一下即可。Code:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm># 阅读全文
posted @ 2012-06-12 22:36 JS_Shining 阅读(225) 评论(0) 推荐(0)
摘要:说是水题。。其实本蒟蒻1A的也只有第二道。。。惭愧惭愧。。。TYVJ1502 兴建高铁这个题目其实就是一搜索,愿意BFS或者DFS都可以,SPFA也随意。不过鉴于数据不大,推荐还是DFS(写起来比较短嘛)Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <algorithm>using namespace std;int n,ans=99999999,tot=99999999;int g[51][51],v[51],w 阅读全文
posted @ 2012-06-11 22:24 JS_Shining 阅读(576) 评论(0) 推荐(0)
摘要:(标题里写个关键词骗点击)这俩题实际上是一个东西,就叫最大01子矩阵(瞎叫的)。大致是这样的模型:有一个由0和1组成的矩阵,然后要求最大的一个矩阵使得其中只包含0(1同理)。那么这个怎么做呢?当然是可以做的(废话),结合求最大正方形的方法,我们可以这样乱搞:首先预处理出所有点可以向上扩展的最长距离和向左扩展的最长距离——这个是N*M的。然后对每个点,从这个点出发向左扩展,记录一个到当前位置纵向的最小高度,每次更新答案,直至不能扩展为止——这步是N*M*K(K为向左扩展距离)的,也就是3方的、显然不管是TYVJ还是POJ,这个算法都是过不了的。经大犇指点,我了解到这个是可以用一个叫单调栈的东西优 阅读全文
posted @ 2012-06-10 21:27 JS_Shining 阅读(1070) 评论(0) 推荐(0)
摘要:就是线性筛嘛。。线性筛到处都有,本蒟蒻就不没事介绍了。Code:#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstdlib>using namespace std;int getlog(int a,int b){ return log(b)/log(a);}int f[10000001],p[1000001];int main(){ int n,tot=0; cin >>n; for (int i=2;i 阅读全文
posted @ 2012-06-02 21:49 JS_Shining 阅读(196) 评论(0) 推荐(0)
摘要:首先YM XLK大犇犇 BlinKer20:45:36傻逼暴力。等会我写。。大概意思就是如果是R*C的过R+C-gcd(R,C)BlinKer20:46:15显然gcd(R,C)是n的约数。暴力这个东西。一共是lgn种可能。然后On暴力R或C算另一个。看是不是gcd为那个数。从以上的文字中很容易可以看出这样的水题对于大犇来说已经不值一提了。作为一个蒟蒻,我整理一下大犇的思想:观察或者打表或者数学推导(一般大犇都这么搞的),可以发现,穿过的网格数等于r+c-gcd(r,c)。然后就有r+c-gcd(r,c)=n即r+c=n+gcd(r,c)两边除gcd(r,c)可知gcd(r,c)一定是N的因数 阅读全文
posted @ 2012-06-02 21:14 JS_Shining 阅读(409) 评论(0) 推荐(0)
摘要:搞了几次才过。。。太弱了。。。本题的关键想到扩展并查集,在基础并查集的基础上额外维护一个集合的大小和当前点在集合中的位置就可以了。Code:type node=record fa,d,l:longint;end;var f:array [0..30001] of node; m,a,b,i:longint; ch:char;function find(x:longint):longint; var i,j,p,q:longint; begin i:=x; while f[i].fa<>i do i:=f[i].fa; p:=i;i:=x; while ... 阅读全文
posted @ 2012-05-13 11:13 JS_Shining 阅读(1073) 评论(2) 推荐(0)
摘要:第一篇文章就弄个水题吧。。范围太小,DP或者搜索都可以过,就是无解的判断容易弄错。Code:var f:array [0..201,0..201,0..201] of longint; a:array [0..201,0..201] of longint; n,m,k,i,j,v,bx,by,ex,ey:longint; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; begin readln(n,m,k); readln(bx,by,ex,ey)... 阅读全文
posted @ 2012-05-12 21:34 JS_Shining 阅读(258) 评论(0) 推荐(0)