BZOJ2960: 跨平面
从一条边出发遍历,每次找旋转角度最小的一条边作为下一条边,直到回到出发的边,就得到了一个区域。这样建出对偶图后跑不定根的最小树形图就行了。
#include<cstdio>
#include<cmath>
#include<map>
#define ub upper_bound
using namespace std;
const int N=5005;
map<double,int>s[N];
int sum,n,m,q[N],v[N];
struct edge{
int v,w;
edge*s;
}e[N*2];
edge*l=e,*h[N];
void add(int u,int v,int w){
sum+=w;
edge s={v,w,h[u]};
*(h[u]=l++)=s;
}
struct vec{
int x,y;
double a;
vec(){}
vec(int x,int y):x(x),y(y),a(atan2(y,x)){}
}a[N];
vec operator-(vec a,vec b){
return vec(a.x-b.x,a.y-b.y);
}
namespace dual{
struct edge{
int u,v,w;
}e[N*2];
edge*l=e;
void add(int u,int v,int w){
edge s={u,v,w};
*l++=s;
}
int d[N],p[N],s[N],t[N];
int find(int&v){
for(int i=1;i!=n;++i){
s[i]=0;
d[i]=1e9;
}
for(edge*i=e;i!=l;++i)
if(d[i->v]>i->w){
p[i->v]=i->u;
d[i->v]=i->w;
}
int now=0;
for(int i=1;i!=n;++i){
v+=d[i];
int u=i;
for(;u&&!s[u];u=p[u])
s[u]=i;
now+=s[u]==i;
for(;s[u]==i;u=p[u]){
s[u]=-1;
t[u]=now;
}
}
return now;
}
int sol(int v){
while(int now=find(v)){
for(int i=1;i!=n;++i)
if(~s[i])t[i]=++now;
n=now+1;
edge*q=l;
for(edge*i=l=e;i!=q;++i)
if(t[i->u]!=t[i->v])
add(t[i->u],t[i->v],i->w-d[i->v]);
}
return v;
}
}
struct buf{
char z[1<<20],*s;
buf():s(z){
z[fread(z,1,sizeof z,stdin)]=0;
}
operator int(){
int x=0,y=0;
while(*s<48)
if(*s++==45)y=1;
while(*s>32)
x=x*10+*s++-48;
return y?-x:x;
}
}it;
int sol(){
for(int i=1;i<=n;++i)
for(edge*j=h[i];j;j=j->s)
s[i][(a[j->v]-a[i]).a]=j-e;
for(int i=1;i<=n;++i)
for(edge*j=h[i];j;j=j->s){
typeof(s->end())u=s[j->v].ub((a[i]-a[j->v]).a);
if(s[j->v].end()==u)
u=s[j->v].begin();
q[j-e]=u->second;
}
using dual::add;
using dual::sol;
int&now=n=1;
for(edge*i=e;i!=l;++i)
if(!v[i-e]){
for(int j=i-e;!v[j];j=q[j])
v[j]=now;
add(0,now++,sum);
}
for(edge*i=e;i!=l;++i)
if(i->w)
add(v[i-e^1],v[i-e],i->w);
return sol(-sum);
}
int main(){
n=it,m=it;
for(int i=1;i<=n;++i){
a[i].x=it;
a[i].y=it;
}
while(m--){
int s=it,t=it;
add(s,t,it);
add(t,s,it);
}
printf("%d\n",sol());
}
BZOJ2960: 跨平面的更多相关文章
- BZOJ2960:跨平面
题面 BZOJ Sol 对该平面图的对偶图建图后就是最小树形图,建一个超级点向每个点连 \(inf\) 边即可 怎么转成对偶图,怎么弄出多边形 把边拆成两条有向边,分别挂在两个点上 每个点的出边按角度 ...
- 高速LVDS电平简介
一.LVDS简介 1.1.LVDS信号介绍LVDS:Low Voltage Differential Signaling,低电压差分信号.LVDS传输支持速率一般在155Mbps(大约为77MHZ)以 ...
- PCB设计工程师面试题
网上的一套PCB设计工程师面试题,测下你能不能拿90分? [复制链接] 一.填空 1.PCB上的互连线按类型可分为()和() . 2.引起串扰的两个因素是()和(). 3.EMI ...
- layout焊盘过孔大小的设计标准
PCB设计前准备 1.准确无误的原理图.包括完整的原理图文件和网表,带有元件编码的正式的BOM.原理图中所有器件的PCB封装(对于封装库中没有的元件,硬件工程师应提供datasheet或者实物,并指定 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 最小割&网络流应用
重要链接 基础部分链接 : 二分图 & 网络流初步 zzz大佬博客链接 : 网络流学习笔记 重点内容:最小割二元关系新解(lyd's ppt) 题目:网络流相关题目 lyd神犇课件链接 : 网 ...
- 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#
个人亲自编写.测试,可以正常使用 道理看原文,这里不多说 网上找到的几篇基本都不能用的 C#代码 bool Equal(float f1, float f2) { return (Math ...
- 在路上:安全公司“跨界”SD-WAN
编者按:本文是SDNLAB“企业+”特别报道之一.“企业+”是SDNLAB重点打造的栏目,汇聚信息行业运营商.设备商.互联网公司.软件公司.集成公司.融创投资公司.科研院所等企业,重新定义IT行业撮合 ...
- Luogu P1429 平面最近点对 【分治】By cellur925
题目传送门 题目大意:给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的.$n$<=100000. $Algorithm$ 最朴素的$n^2$枚举肯定 ...
随机推荐
- matlab 画图数据导入
http://www.yiibai.com/matlab/matlab_data_import.html Python 执行py 文件: 在要执行文件处按shift右击鼠标打开cmd 命令窗口,输入: ...
- 检测IE浏览器方法
var isIE=function(){ var b=document.createElement("b"); b.innerHTML="<!--[if IE]&g ...
- rar 命令
1 wger http://www.rarlab.com/rar/rarlinux-3.9.2.tar.gz 下载文件包 会下载在当前目录 2 cp xxx.xxx ../ 复制xxx.xxx到上个目 ...
- 【Alpha版本】冲刺阶段——Day 7
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...
- 使用HTML5新特性Mutation Observer实现编辑器的撤销和撤销回退操作
MutationObserver介绍 MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力.该API设计用来替换掉在DOM3事件规范中引入的Mut ...
- 关于 UINavigationController 的一些知识
1.在 UINavigationController 中,添加一个UITextView,虽然设置self.frame = textView.bounds(从0.0开始),但是系统会自动设置一个cont ...
- 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
4310: 跳蚤 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 180 Solved: 83[Submit][Status][Discuss] De ...
- Teamviewer11现在无法捕捉屏幕画面。这可能是由于快速的用户切换或远程桌面会话断开/最小化。
如果你用“远程桌面”连过去开启Teamviewer的话,当你退出“远程桌面”后,外网用Teamviewer连接就会出现这个问题. 解决方法: 不用远程连接过去开启Teamviewer,直接在在电脑本机 ...
- Non Lasting Storage File System、procfs、sysfs
catalog . 引言 . proc文件系统 . 简单的文件系统 . sysfs 0. 引言 传统上,文件系统用于在块设备上持久存储数据,但也可以使用文件系统来组织.提供.交换并不存储在块设备上的信 ...
- js实现A*寻路算法
这两天在做百度前端技术学院的题目,其中有涉及到寻路相关的,于是就找来相关博客进行阅读. 看了Create Chen写的理解A*寻路算法具体过程之后,我很快就理解A*算法的原理.不得不说作者写的很好,通 ...