一名苦逼的OIer,想成为ACMer

Iowa_Battleship

2018年9月2日

CH#56C 异象石

摘要: 一道LCA "原题链接" 先跑一边$dfs$,求出每个节点的时间戳,如果我们将有异象石的节点按时间戳从小到大的顺序排列,累加相邻两节点之间的距离(首尾相邻),会发现总和就是答案的两倍。 于是我们只需要维护这个按时间戳排序的有序数列和答案即可。 当插入一个新的节点$u$时,设插入位置的原有两节点为$x 阅读全文

posted @ 2018-09-02 19:56 Iowa_Battleship 阅读(191) 评论(0) 推荐(0) 编辑

POJ3417 Network

摘要: 一道LCA+树上差分 "原题链接" 显然每一条新增边都会导致环。 如果试着举些例子的话,很容易发现割掉非环上的边,则割掉其他任意一条新增边都可达成目标;若割掉的原有边是一个环上的边,那么只有割掉导致这个环出现的新增边才能使得图变为不连通的两部分。若割掉的边是两个或两个以上的环上的边,那么无论第二次怎 阅读全文

posted @ 2018-09-02 19:28 Iowa_Battleship 阅读(122) 评论(0) 推荐(0) 编辑

HDOJ2586 How far away ?

摘要: 一道LCA模板 "原题链接" $LCA$模板题,不解释。 倍增版 cpp include include include using namespace std; const int N = 4e4 + 10; int fi[N], da[N '9'; c = getchar()) p |= c = 阅读全文

posted @ 2018-09-02 19:00 Iowa_Battleship 阅读(117) 评论(0) 推荐(0) 编辑

BZOJ1999或洛谷1099&BZOJ2282或洛谷2491 树网的核&[SDOI2011]消防

摘要: 一道树的直径 "树网的核 BZOJ原题链接" "树网的核 洛谷原题链接" "消防 BZOJ原题链接" "消防 洛谷原题链接" ~~一份代码四倍经验,爽~~ 显然要先随便找一条直径,然后直接枚举核的两个端点,对每一次枚举的核遍历核上的每个点,用$dfs$求出核外节点到核的最大值即可,时间复杂度为$O( 阅读全文

posted @ 2018-09-02 17:01 Iowa_Battleship 阅读(150) 评论(0) 推荐(0) 编辑

BZOJ1912或洛谷3629 [APIO2010]巡逻

摘要: 一道树的直径 "BZOJ原题链接" "洛谷原题链接" 显然在原图上路线的总长为$2(n 1)$。 添加第一条边时,显然会形成一个环,而这条环上的所有边全部只需要走一遍。所以为了使添加的边的贡献最大化,我们找出树的直径,将其两端点连上边即可。 设直径长$L$,于是路线总长就变为$2(n 1) L+1= 阅读全文

posted @ 2018-09-02 16:32 Iowa_Battleship 阅读(118) 评论(0) 推荐(0) 编辑

CH6202 黑暗城堡

摘要: 一道最短路+生成树 "原题链接" 实际上就是生成树的中每个点到节点$1$的距离等于原图中这个点到节点$1$的最短距离,求这样的生成树的棵数。 先用$SPFA$或$Dijkstra$求出所有点到节点$1$的最短路径$dis[x]$,然后将所有节点按$dis$从小到大排序。 枚举$x$,表示已经有$x 阅读全文

posted @ 2018-09-02 16:11 Iowa_Battleship 阅读(234) 评论(0) 推荐(0) 编辑

POJ2728 Desert King

摘要: 一道生成树+$0/1$分数规划 "原题链接" 设每条边的距离为$dis[x]$,两点高度差为$h[x]$,该图的生成树为$T$,则题目实际求的就是$\dfrac{\sum\limits_{x\in T}h[x]}{\sum\limits_{x\in T}dis[x]}$的最小值。 这就是经典的$0/ 阅读全文

posted @ 2018-09-02 11:30 Iowa_Battleship 阅读(80) 评论(0) 推荐(0) 编辑

导航