4541: [Hnoi2016]矿区 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 433  Solved: 182[Submit][Status][Discuss] Description 平面上的矿区划分成了若干个开发区域.简单地说,你可以将矿区看成一张连通的平面图,平面图划分为了若 干平面块,每个平面块即为一个开发区域,平面块之间的边界必定由若干整点(坐标值为整数的点)和连接这些整点 的线段组成.每个开发区域的矿量与该开发区域的面积有关:具…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4541 题解: 平面图的对偶图,dfs树 平面图的对偶图的求法: 把所有双向边拆为两条互为反向的单向边, 显然,每条单向边应该唯一属于一个平面. 我们依次枚举还没有被确定属于哪个平面的单向边, 然后从该边出发,包裹出一个最小的平面,那么途中所经过的边都属于这个平面. 包裹的具体做法: 对于当前的边x->y,我们找到其反向边y->x顺时针旋转遇到的第一条边y->z作为包裹该平面的下一条…
首先平面图转对偶图,大概思路是每条边存正反,每个点存出边按极角排序,然后找每条边在它到达点的出边中极角排序的下一个,这样一定是这条边所属最小多边形的临边,然后根据next边找出所有多边形,用三角剖分计算面积 然后就比较妙了,把对偶图随便搞一个生成树出来,然后对于每个询问,如果一条边是树边,那么如果这条边在树上是向上的就加它子树的和,否则就减 #include<iostream> #include<cstdio> #include<algorithm> #include&…
https://www.cnblogs.com/ljh2000-jump/p/6423399.html #include<cmath> #include<vector> #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll; using namespace std; ; ,nxt[N],tot,r…
学习了一下平面图剖分的姿势,orz cbh 每次只要随便选择一条边,然后不停尽量向左转就行 #include <bits/stdc++.h> #define N 1300000 #define M 5000013 #define LL long long #define pb push_back using namespace std; LL n, m, k; struct point { LL x, y; } S[N]; vector <LL> bi[N]; vector <…
Description 比特哈顿镇有n*n个格点,形成了一个网格图.一开始整张图是完整的.有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通. Input 第一行包含两个正整数n,k(2<=n<=1500,1<=k<=2n(n-1)),表示网格图的大小以及操作的个数.接下来k行,每行包含两条信息,每条信息包含两个正整数a,b(1<=a,b<=n)以及一个字符c(c=N或者E).如果c=N,表示删除(a,b)到(a,b+1)这条边:…
思路还是挺好玩的 首先简单粗暴的想法是dfs然后用离散化权值树状数组维护,但是这样有个问题就是这个全局的权值树状数组里并不一定都是当前点子树里的 第一反应是改树状数组,但是显然不太现实,但是可以这样想,就是现在统计子树之前把查到的答案减去,然后再查子树最后加上查到的答案,这样相当于去重了 方便起见,离散化的时候按从大到小的顺序,这样就变成了求比当前点小的点 #include<iostream> #include<cstdio> #include<algorithm> #…
http://www.lydsy.com/JudgeOnline/problem.php?id=1086 题意:给出n个点的树,让你对树进行分块,每块的大小范围在[b, 3b]之间. 思路:一开始想着维护一个sz[u]代表以u为根的子树(不包括u本身)的大小,如果在范围之内就分成一块,但是这样写感觉一些细节上的东西没考虑清楚,WA了很久. 看了别人的做法:http://blog.csdn.net/popoqqq/article/details/42772237,很简洁. 大概是维护一个栈,每次d…
强烈安利:http://blog.csdn.net/qq_34637390/article/details/51313126 这篇讲标记讲的非常好,这个标记非常神奇-- 首先last表示扫描到last这个点了,val[x]表示x到last中的最小值,sum[x]表示last分别等于1,2,3....last时的和(也就是所有val历史版本的和) 然后答案就是当前last扫到r,l到r之间所有sum的和(稍微画一下就理解了 然后考虑现在要挪动last,新的last的影响范围是他之前第一个比他小的位…
[HNOI2016]矿区 平面图转对偶图 方法: 1.分成正反两个单向边,每个边属于一个面 2.每个点按照极角序sort出边 3.枚举每一个边,这个边的nxt就是反边的前一个(这样找到的是面的边逆时针的) 4.相当有了置换,把每个nxt环找到,加上统一编号,并计算面积 5.有向面积为负数的是无限域,仅有一个 6.原来的单向边“旋转90度”,连接两个面 然后本题再跑一个以无限域为根的生成树 记录每个原来的边是否是生成树上的边 并记录生成树子树的S和S^2 询问: 如果当前的边是生成树边的话,如果属…