从左到右加边, 假如+的边e形成环, 那么记下这个环上最早加入的边_e, 当且仅当询问区间的左端点> _e加入的时间, e对答案有贡献(脑补一下). 然后一开始是N个连通块, 假如有x条边有贡献, 答案就是N-x. 用LCT维护加边, 可持久化线段树维护询问. O(NlogN)-----------
分类:
其他好文 时间:
2016-02-02 14:50:37
阅读次数:
177
题意:就是选两个点出发,只能走草坪,看能不能走完所有的草坪 分析:由于数据范围很小,所有枚举这两个点,事先将所有的草坪点存起来,然后任选两个点走,(两个点可以是同一个点) 然后BFS就行了 注:无解的情况很好做,事先深搜判连通块的个数就好,大于2就无解(代码比较烂) #include<cstdio>
分类:
其他好文 时间:
2016-01-28 17:02:56
阅读次数:
253
将所有权值离散化,建立权值线段树,维护区间内数字个数以及对数的和,用于比较乘积大小。对于每个连通块维护一棵权值线段树,合并时用线段树合并。对于操作3和4,暴力删除所有不合法节点,然后一并修改后插入线段树即可。时间复杂度$O(m\log m)$。#include#include#includeusin...
分类:
其他好文 时间:
2016-01-20 06:17:12
阅读次数:
199
先忽略航线,求出图中所有连通块,再用航线拓扑排序求出每个连通块的优先级然后dijkstra时优先处理优先级高的块里的点就行了ps:这题SPFA会TLE#include #include #include #include #include #include #include #include #de...
分类:
其他好文 时间:
2016-01-18 15:00:29
阅读次数:
142
先预处理出所有连通块,对于每一个*,看他四周的连通块即可#include#include#include#includeusing namespace std;const int maxn=1000+10;char s[maxn][maxn];int Map[maxn][maxn];int n,m;...
分类:
其他好文 时间:
2016-01-14 15:51:32
阅读次数:
292
自力更生,艰苦创业。没错,相信自己,能行的。这道题我的思路大概很明显这是个有向图,先求出各自的强连通块,然后缩点,形成一个DAG,然后在这上面跑 dp。 如果有一个强连通分量的值为所有的点数那么该连通块内点的个数即为答案。其实有向无环图上的dp是很经典的,要多注意。加油,相信自己。对了,这里面据说....
分类:
其他好文 时间:
2016-01-06 15:32:39
阅读次数:
158
tree把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小.开一个并查集,每次读到边权是0的边就合并.最后Ans?i??=size[findset(i)],size表示每个并查集根的sizeAns_i=size[findset(i)],sizeAns?i??=size[find...
分类:
其他好文 时间:
2016-01-02 22:36:51
阅读次数:
536
题意:给你一个图,每条边权值0或1,问每个点周围最近的点有多少个?思路:并查集找权值为0的点构成的连通块。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define clc(a,b) memset(a,b,sizeof(a)) ...
分类:
其他好文 时间:
2016-01-02 22:31:47
阅读次数:
215
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241/* HDU 1241 Oil Deposits --- 入门DFS */#include int m, n; //n行m列char mapp[105][105];/* 将和i,j同处于一个连通块的...
分类:
其他好文 时间:
2015-12-13 23:20:15
阅读次数:
174
首先要将这个图连通,方法是通过扫描线+set求出每个连通块最高的点上方的第一条边,然后向交点连边。然后把边拆成两条双向边,每次找到一条没走过的边,找到极角排序后它的反向边的后继,直到回到这条边。根据叉积可以求出面积,如果面积非负,那么就说明找到了一个封闭区域。然后再进行一次扫描线,找到一个点上方最低...
分类:
其他好文 时间:
2015-12-07 14:07:32
阅读次数:
155