poj3109 Inner Vertices】的更多相关文章

思路: 树状数组 + 扫描线. 实现: #include <cstdio> #include <vector> #include <algorithm> using namespace std; ; int x[MAXN], y[MAXN], bit[MAXN], cnt[MAXN], now[MAXN], n; bool vis[MAXN]; vector<int> lines[MAXN]; int lowbit(int x) { return x &am…
Given a Directed Graph and two vertices in it, check whether there is a path from the first given vertex to second. For example, in the following graph, there is a path from vertex 1 to 3. As another example, there is no path from 3 to 0. We can eith…
E. Close Vertices You've got a weighted tree, consisting of n vertices. Each edge has a non-negative weight. The length of the path between any two vertices of the tree is the number of edges in the path. The weight of the path is the total weight of…
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块的点权值和大于等于该边的边权 其实是蛮简单的一道题目,为什么当时就自闭了呢... 正向删边明显不靠谱,于是我们考虑反向加边,答案就是\(m-\)加入的边数 我们按照边权排序,使用并查集维护点权值和,同时记录一个\(cnt\)数组表示当前存在于该联通块内但未加入答案的边数 如果说当前联通块的点权值和大…
Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型 cmds.ls() 的 flags 中没有指明 uvs 等这些 component 的选项,就算使用 type 来过滤,我们会发现 uv 的 objectType 是 u'mesh'. cmds.filterExpand(selectionMask = 35, expand = 1) expand 相当于 ls() 中的 flat 至于更多的 compone…
[CC-BLREDSET]Black and Red vertices of Tree 题目大意: 有一棵\(n(\sum n\le10^6)\)个结点的树,每个结点有一种颜色(红色.黑色.白色).删去一个由红色点构成的连通块,使得存在一个黑点和一个白点,满足这两个点不连通.问有多少种删法. 思路: 设满足删掉这个点后,使得存在一个黑点和一个白点,满足这两个点不连通的红点为关键点.那么我们可以用两个\(\mathcal O(n)\)的树形DP求出所有的关键点.剩下的问题就变成了求有多少种全红连通…
题目链接 正解:点分治+树状数组. 点分治板子题,直接点分以后按照$w$排序,扫指针的时候把$w$合法的路径以$l$为下标加入树状数组统计就行了. 写这道题只是想看看我要写多久..事实证明我确实是老年选手了,这种傻逼题写+调竟然用了$40min$.. #include <bits/stdc++.h> #define il inline #define RG register #define ll long long #define lb(x) (x & -x) #define N (3…
Interesting Vertices(前向星+思维+dfs回溯) 参考博客:https://blog.csdn.net/I_believe_CWJ/article/details/102472012 题目大意:给你一课有n个节点的树,其中有k个节点被染色,求有多少个节点满足自身没有被染色并且它的每棵子树中都至少有一个节点被染色.解题思路:dfs回溯类似求树的重心的方式求解,dfsdfs回溯可以得到每个节点的它的子树中是否都有染色的点并统计所有子树中染色点的个数sum,然后走向父亲的那棵子树中…
openmesh - impl - Remove Duplicated Vertices 关于openmesh元素删除实现的介绍参见:openmesh - src - trimesh delete and add elements - grassofsky - 博客园 (cnblogs.com) 重复点删除的主要步骤如下: 找到所有的重复顶点,并设定每组重复顶点中需要保留的顶点: 记录这些重复顶点对应的三角形:(因为下一步在顶点删除的时候,会将顶点周围关联的三角形都删除,并将顶点的状态设置为de…
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出一棵树,问有多少条路径权值和不大于w,长度不大于l. http://codeforces.com/contest/293/problem/E 有男人八题很相似,但是多了一个限制. 同样 还是点分治,考虑二元组(到根的路径权值和,到根的路径长度). 按第一维度排序之后,可以用two points查询权值小不大于w的,然后 用树状数组维护路径…
题链: http://codeforces.com/contest/293/problem/E题解: 点分治,树状数组 大致思路和 POJ 1741 那道点分治入门题相同, 只是因为多了一个路径的边数限制, 所以在统计答案时, 要用数据结构维护一下在满足距离限制的情况下,有多少点也满足边数限制. 树状数组维护到当前的根(重心)的距离为x时的点的个数. 在calc函数中,记录dep[u]表示u到当前的根(重心)的边数, 然后统计u号点可以和多少点组成合法点对时,就查询树状数中有多少点满足到根的距离…
链接 [http://codeforces.com/contest/1065/problem/B] 题意 给你n个点,m条边,让你找最多孤立点和最少孤立点,不能有自环路 分析 对于最少max(0,n-2*m), 然后考虑独立点最多的情况:也就是说我们要考虑使每条边的利用效率最低. 等同于可以这样想:加入每个点,使这个点消耗的边最多,一直添加到没有变剩余为止. 我们可以在新的点加入时,将其连接到所有已经不是独立点的点上,这样就能最多的消耗边. 代码 #include<bits/stdc++.h>…
正赛的时候完全没看这个题,事后winterzz告诉我他想出来的解法. 首先题意是给出n个点,m次操作. 操作有一种是连接两个点,另一种是求此时再为这个图连k条边,最少和最多能有几个联通块. 最少的求法很简单,显然一条边可以减少一个联通块. 最多的求法则稍微复杂: 首先我们先将所有联通块填成完全图,这部分边是白给的. 接下来最优的连接方式显然是将最大的和次大的联通块合并,如果还有边需要连就再将其把第三大的联通块合并...一直这样下去. 这个东西我们显然可以二分,二分出将多少个联通块合并成一起能用完…
链接 大意: 给定邻接表表示两点是否可以连接, 要求将图连成树, 且边不相交的方案数 n范围比较小, 可以直接区间dp $f[l][r]$表示答案, $g[l][r]$表示区间[l,r]全部连通且l,r间连边的方案 #include <iostream> #include <algorithm> #include <cstdio> #define PER(i,a,n) for(int i=n;i>=a;--i) #define REP(i,a,n) for(int…
不存在-1的情况,而且最多一轮就结束了.如果新增加的黑点v0会产生新的黑点v1,那么v0和v1肯定是在一条轴上的,而原来这条轴上已经有黑点了. 离散以后扫描线统计,往线段上插点,然后查询区间上点数. 不妨以x为主轴,用一条条平行于y轴的线去扫. 按照x为主y为副排序以后,记录下标,将下标按y为主排序,为的是把y相同的一系列点变成一个入点(d[id] = 1),一个出点(d[id] = -1), 可能某个相同y值的点只有一个,所以最后的出点 -= 1. 点可能有重复,判重的话就标记一下平行x轴的线…
[题目链接] http://poj.org/problem?id=3109 [题目大意] 在一个棋盘上放满白子,现在把一些白子变成黑子, 如果一个白子上下左右都有黑子,就会变成黑子,问最终黑子个数 [题解] 首先我们在每列的开头和结尾做标记,之后对行线扫描, 如果是列的开头,那么在该列中标记,如果是列的结尾,则在该列中去除标记 那么我们只要统计行的开头到行的结尾之间夹着多少列标记,且该列下该行没有原来的黑子 就是该行新增的黑子数量,对于总的黑子数量,可以用树状数组统计,之后容斥一下列标记即可.…
题目:http://codeforces.com/contest/293/problem/E 仍旧是点分治.用容斥,w的限制用排序+两个指针解决, l 的限制就用树状数组.有0的话就都+1,相对大小不变. 切勿每次memset!!!会T得不行.add(sta[ l ].len)即可,但要判一下(l==r)以防不测.(真的有那种数据!) 最后注意树状数组的范围是L(即L+1),不是n.不然可以尝试: 2 10 12 1 5 #include<iostream> #include<cstdi…
\(\\\) \(Description\) 求一个\(N\)个点\(M\)条边的无向图,点度为 \(0\) 的点最多和最少的数量. \(N\le 10^5,M\le \frac {N\times (N-1)}{2}\) \(\\\) \(Solution\) 关于最少的数量,注意到一条边会增加两个点度,所以最多能带来 \(2M\) 个点度,最少的零点度点数就是 \(max(N-2M,0)\). 关于最多的数量,要知道 \(N\) 个点的完全图边数是 \(\frac {N\times (N-1)…
题目传送门 题意:现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路劲长度 <= l, 总权重 <= w. 题解: 1.找到树的重心. 2.求出每个点到中心的长度和权值. 3.对所有点都询问出合法点的个数(包括同一颗子树)加到答案上. 4.对于每一棵子树内部都找到合法点的个数从答案中减去. 5.递归处理每一颗子树. 我们现在最大的问题就是怎么计算合法点的个数. 我们把点的信息记录下来之后,按照权重从小到达排序. 然后我们就可以用2个端点维护出 a[l].we…
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每条边都有权值,让你删除一些边,使得最终的图中满足条件:一条边存在当且仅当包含该边的连通块的点权值和大于等于该边权值,问最少要移走多少条边. 题解:删边不好做,考虑加边,对于每条边,判断加入是否合法.按边权从小到大排序进行加边,要加入一条边之前,若之前两点不连通,则合并起来变成一个连通块,可以用并查集…
开始zz写了一个主席树,后来发现写个树状数组就行~ #include <cstdio> #include <vector> #include <algorithm> #include <bits/stdc++.h> #define N 100005 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; i…
结论 注意到如果$x$周围有偶数个1,对$x$操作显然不会改变$a_{x}$,因此不妨强制操作的点周围要有奇数个1,不难发现此时恰好会改变该点,即令$a_{x}=a_{x}\oplus 1$ 称$\{a_{i}\}$合法当且仅当其能被得到,问题即统计合法序列数 显然操作是可逆的,因此$\{a_{i}\}$合法等价于其能通过操作使得$\forall 1\le i\le n,a_{i}=1$ 结论1:若$\{a_{i}\}$能通过操作得到$\{b_{i}\}$,两者合法性相同 根据操作的可逆性显然成…
首先可以发现的是,因为两条线段不能在除了端点处相交,因此整个多边形最终一定会被连接成最上方由若干条线段在端点处相交连成,每条线段下方又是一个子结构. 因此你会发现,每个合法的状态都能被分成两个合法的子结构,因此可以考虑使用区间 \(dp\) 来解决这个问题. 首先,我们简单地考虑令 \(dp_{i, j}\) 表示只使用 \(i, j\) 这个区间之间的边将 \(i, j\) 这个区间联通的方案. 直接在 \(i, j\) 之间连边. 那么枚举每个 \(k\) 做为中间的断点,那么就有转移: \…
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG库以及发布至geoserver.本方法是以geotools为开发工具实现入库,以geoserver manager来实现服务的自动发布.这里着重描述geotools编写SHP入库的方法. 2.Geotools介绍 2.1总体介绍 Geotools是Java语言编写的开源GIS工具包,其功能涵盖了地理…
以前学的是openGL, 最近才开始学DirectX11,写了个很垃圾的代码,怀念以前的glPushMatrix(), glPopMatrix(), glBegin(), glEnd(), 多简单啊,可惜在openGL4后面的版本中放弃了这些经典的函数,改成了跟directX差不多的自定义管线, 我觉得openGL已经被改的面目全非了,可能是openGL慢的缘故吧.openGL4.3的VAO,VBO还是不能理解. 写了个垃圾的程序,许多个几何体,自己写函数实现了以前glPushMatrix(),…
流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, v) = 0.流网络中有两个特殊的顶点:源点 s (source)和汇点 t(sink).为方便起见,假定每个顶点均处于从源点到汇点的某条路径上,就是说,对每个顶点 v ∈ E,存在一条路径 s --> v --> t.因此,图 G 为连通图,且 |E| ≥ |V| - 1. 下图展示了一个流网络…
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: Bellman-Ford 单源最短路径算法:时间复杂度为 O(VE),适用于带负权值情况: 对于全源最短路径问题(All-Pairs Shortest Paths Problem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离.例如,对每个顶点应用 Bel…
Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Problem),其中图 G 允许存在权值为负的边,但不存在权值为负的回路.Floyd-Warshall 算法的运行时间为 Θ(V3). Floyd-Warshall 算法由 Robert Floyd 于 1962 年提出,但其实质上与 Bernad Roy 于 1959 年和 Stephen Warshal…
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年构思并于 1959 年发表.其解决的问题是:给定图 G 和源顶点 v,找到从 v 至图中所有顶点的最短路径. Dijkstra 算法采用贪心算法(Greedy Algorithm)范式进行设计.在最短路径问题中,对于带权有向图 G = (V, E),Dijkstra 算法的初始实现版本未使用最小优先…
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 Bellman-Ford-Moore 算法. Bellman-Ford 算法和 Dijkstra 算法同为解决单源最短路径的算法.对于带权有向…