博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4541: [Hnoi2016]矿区【平面图转对偶图+生成树】
阅读量:4577 次
发布时间:2019-06-08

本文共 1346 字,大约阅读时间需要 4 分钟。

首先平面图转对偶图,大概思路是每条边存正反,每个点存出边按极角排序,然后找每条边在它到达点的出边中极角排序的下一个,这样一定是这条边所属最小多边形的临边,然后根据next边找出所有多边形,用三角剖分计算面积

然后就比较妙了,把对偶图随便搞一个生成树出来,然后对于每个询问,如果一条边是树边,那么如果这条边在树上是向上的就加它子树的和,否则就减

#include
#include
#include
#include
#include
using namespace std;const int N=2000005;int n,m,k,cnt=1,tot,rt,a[N],fa[N],ne[N],c[N];long long s1[N],s2[N],ans1,ans2;bool v[N],vis[N];struct dian{ double x,y; dian(double X=0,double Y=0) { x=X,y=Y; } dian operator + (const dian &a) const { return dian(x+a.x,y+a.y); } dian operator - (const dian &a) const { return dian(x-a.x,y-a.y); }}p[N];struct bian{ int x,y,id; double a; bian(int X=0,int Y=0,int ID=0) { x=X,y=Y,id=ID,a=atan2(p[y].y-p[x].y,p[y].x-p[x].x); } bool operator < (const bian &b) const { return a
f[N],g[N];int read(){ int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}double cj(dian a,dian b){ return a.x*b.y-a.y*b.x;}long long gcd(long long a,long long b){ return !b?a:gcd(b,a%b);}void dfs(int u){ vis[u]=1; for(int i=0;i
>=1; printf("%lld %lld\n",ans1,ans2); } return 0;}

转载于:https://www.cnblogs.com/lokiii/p/10816311.html

你可能感兴趣的文章
《java入门第一季》之ArrayList集合小案例
查看>>
python之路——函数(进阶)
查看>>
node.js---sails项目开发(2)
查看>>
Atom常用插件、快键键、使用技巧
查看>>
20150630 学习笔记
查看>>
欢迎来到我们的博客
查看>>
IT修养-基础篇
查看>>
从一个新手容易混淆的例子简单分析C语言中函数调用过程
查看>>
Core Java(五)
查看>>
django-csrf_exempt
查看>>
MVC系列1-MVC基础 (ASP.NET)
查看>>
一篇学术论 文投稿的所有流程是怎样的?
查看>>
Ionic的项目结构(angluar js)
查看>>
mysql的基本操作
查看>>
2019.07.21软件更新公告
查看>>
FFT模板
查看>>
Android热修复AndFix
查看>>
软件工程(C编码实践)学习总结及心得
查看>>
lnmp-zabbix
查看>>
ruby on rails网站快速上手之环境搭建
查看>>