无向图定向计数最值脑洞

题:给一张无向连通图.给每条边定向.要求有且仅有1号点入度为0.没有环.求极长链条数的max,min. 做法:随便开个脑洞.已经不会想算法的我也不知道怎么解. ps,有人知道杂做麻烦和窝说一声qwq

December 22, 2015 · 1 min · laekov

bzoj4152 [AMPPZ2014]The Captain

naive之laekov系列.这么水的题还想了几天ovoovo 这个距离,咦,不是传统的距离啊.等距线是十字形的. 思考一下.发现,分别按x和y排序,把相邻的两点之间连边,dijkstra,完了. 为啥啊?因为这样建图可以保证任意两点的最短路一定能在图上跑出来. 毕竟我太弱,ovoovo

June 21, 2015 · 1 min · laekov

bzoj4070 [Apio2015]雅加达的摩天楼

apio的第二题.其实是我做题顺序里的最后一道. 我的方法比较奇怪.对于p分开讨论.如果p>c那么直接建边,否则在图的旁边再建若干条链,把这个点连到链上去.然后再跑一下最短路. 卡一卡常数就过去啦.

May 13, 2015 · 1 min · laekov

bzoj4011 [HNOI2015]落忆枫音

题目好长啊,像个阅读题一样.还是比较有意思的一道题.有点像gorgeous和我说的那个原创题的感觉啊. 首先如果没有加边的话那么答案就是∏indegreeu. 如果加了边之后还是dag那么无影响. 如果加了边之后存在一个scc,那么答案就要减去∑(环*∏其它点的indegree).这个东西可以用随随便便的dp来解决.

April 29, 2015 · 1 min · laekov

bzoj2438 [中山市选2011]杀人游戏

之前在哪里听过的题啊.于是卡了一晚上. 就是缩个点然后看看哪些点必需自己去点第一把火就好了. 然后有一种情况是把剩下的都查完之后只剩下一个了.那么看存不存在这种情况.那就是某个第一把火的地方的scc大小为1,且它连出去的都不必需用它查. 然后我就卡在ans>1上了.我傻了ovo 然后非递归tarjan还是写得不熟啊.还要再加深一下对自己想出来的算法的印象.

April 21, 2015 · 1 min · laekov

bzoj4010 [HNOI2015]菜肴制作

bzoj都3k道题了ovo hnoi的题好强. 这个题就建反图然后跑topsort就行了.每次选能选的里最大的扔进去.最后倒过来输出. 我也是猜的然后交上去居然是对的. 为什么呢?好神奇?

April 21, 2015 · 1 min · laekov

bzoj3887 [Usaco2015 Jan]Grass Cownoisseur

明明就是usaco的水题嘛有啥好写的ovo只是想mark一下刚自己想出来的非递归的正常版的tarjan. 这题思路灰常简单.就tarjan缩scc然后在dag上找一下最长路就完了. 然后就是非递归的tarjan.考虑平时用栈建树的dfs序的方法,既把一个点的所有儿子扔进栈再递归.然而这个方法不能直接套进tarjan的dfs.因为它的一个儿子可能会对另一个儿子造成影响,有可能甚至直接改变dfs的顺序. 所以如果更新的时候一个点连出去的点还没有被访问,那么不管它是否已经在栈里,都再把它扔进去一次.这样就保证了访问的顺序.而在再次访问的时候只要判断一下是否已经访问就行了. 然后对于两个更新,首先如果直接low[p]=dfn[p]的话是不需要专门去用dfn来取min的.然后考虑倒着更新.每个点被退visit栈的时候去更新它的父亲就好.因为它的父亲一定还没有出栈.然后如果是只更新不递归那就直接访问. 这样的话空间复杂度会变成O(n+m),不过妈妈再也不用担心我暴栈了.而这个方法也比强行模拟系统栈要方便一些. 开心ovo

April 8, 2015 · 1 min · laekov

bzoj3597 [Scoi2014]方伯伯运椰子

去年的省选题.之前知道了是找负环.不过一直感觉好迷是个坑.最近又想了想发现也不是很麻烦. 当年省选的时候完全对比例题无感啊.经过一年之后终于觉悟了一点东西. 考虑一个网络流,每条边的流量上限是inf,只有从源出来的边不是.然后如果进行一次正向增广会使代价增加b+d,如果进行一次逆向增广的话代价会增加a-d,前提是有流量.于是只要二分一个答案,看下存不存在一个负环来增广就好了. 然后一个spfa就迷之拿了bzoj的rank1.好开心.

March 29, 2015 · 1 min · laekov

BZOJ1295 [SCOI2009]最长距离

<div class="post_brief"><p> 多老的省选题了。</p>   就处理一下任意两个格子之间最少要经过几个1,如果小于等于t就更新答案。   #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; #define mkword(x,y) (((x)<<16)|(y)) #define hiword(x) ((x)>>16) #define loword(x) ((x)&0x0000ffff) const int maxn = 33; const int maxnd = 909; const int movx[4] = {0, 0, 1, -1}; const int movy[4] = {1, -1, 0, 0}; typedef pair <int, int> dpr; inline int sqr(int x) { return x * x; } int n, m, t, d[maxn][maxn], ans; int mp[maxn][maxn]; dpr hp[maxnd << 2];...

February 25, 2015 · 2 min · laekov

BZOJ2709 [Violet 1]迷宫花园

水水的二分+最短路么? 然后读入坑死了检查了好久的最短路。 没救了。 然后发现我好像进前100了,小小地开心一下。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef pair <double, int> dpr; struct edge { int v, t; edge *next; }; #define nid(_x_,_y_) ((_x_-1)*m+(_y_)) const int maxn = 10009; const int maxa = 109; const int maxe = 80009; const int mov[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; const double eps = 1e-8; int n, m, st, te, c[maxn]; char mp[maxa][maxa]; double d[maxn], tg; edge *head[maxn], *ep, elst[maxe]; dpr hp[maxe];...

January 17, 2015 · 2 min · laekov