bzoj1760 [Baltic2009]Triangulation
给定一个多边形的三角剖分(n<=1e5),且每个三角形有其颜色,问最多可以把这个三角剖分分成几个联通的部分,使任何一种颜色不出现在多个连通块中
建出三角剖分对应的树,同种颜色的点之间的路径是不能被切开的,因此将同色的点间路径标记一下,未标记的边数即为答案
具体实现可以用树上差分进行标记,树链剖分lca,同色的点按dfs序排序并将排序后相邻的点间路径标记
- #include<cstdio>
- #include<algorithm>
- typedef long long i64;
- const int R=5e6,N=,P=;
- char buf[R],*ptr=buf-;
- int _(){
- int x=,c=*++ptr;
- while(c<)c=*++ptr;
- while(c>)x=x*+c-,c=*++ptr;
- return x;
- }
- long long hx[P];
- int hy[P];
- int n,ans=-;
- int e[N][],ep[N],col[N],cc[N],*cl[N],*cr[N],_c[N],*cp=_c,v[N];
- int fa[N],sz[N],son[N],dep[N],top[N],id[N],idp=;
- void chk(int a,int b,int id){
- if(a>b)std::swap(a,b);
- i64 h=i64(a)<<|b;
- int w=h%P;
- while(hy[w]){
- if(hx[w]==h){
- e[hy[w]][ep[hy[w]]++]=id;
- e[id][ep[id]++]=hy[w];
- return;
- }
- if((w+=)>=P)w-=P;
- }
- hx[w]=h;hy[w]=id;
- }
- void f1(int w,int pa){
- fa[w]=pa;
- dep[w]=dep[pa]+;
- sz[w]=;
- for(int i=;i<ep[w];++i){
- int u=e[w][i];
- if(u==pa)continue;
- f1(u,w);
- sz[w]+=sz[u];
- if(sz[son[w]]<sz[u])son[w]=u;
- }
- }
- void f2(int w,int tp){
- top[w]=tp;
- id[w]=++idp;
- if(son[w])f2(son[w],tp);
- for(int i=;i<ep[w];++i){
- int u=e[w][i];
- if(u==fa[w]||u==son[w])continue;
- f2(u,u);
- }
- }
- void f3(int w){
- for(int i=;i<ep[w];++i){
- int u=e[w][i];
- if(u==fa[w])continue;
- f3(u);
- v[w]+=v[u];
- }
- if(!v[w])++ans;
- }
- int lca(int x,int y){
- int a=top[x],b=top[y];
- while(a!=b){
- if(dep[a]<dep[b])std::swap(a,b),std::swap(x,y);
- x=fa[a];a=top[x];
- }
- return dep[x]<dep[y]?x:y;
- }
- bool cmp(int a,int b){
- return id[a]<id[b];
- }
- int main(){
- fread(buf,,R,stdin);
- n=_()-;
- for(int i=;i<=n;++i){
- int a=_(),b=_(),c=_();
- chk(a,b,i);
- chk(a,c,i);
- chk(c,b,i);
- ++cc[col[i]=_()];
- }
- for(int i=;i<=n;++i)cl[i]=cr[i]=cp,cp+=cc[i];
- for(int i=;i<=n;++i)*(cr[col[i]]++)=i;
- f1(,);
- f2(,);
- for(int i=;i<=n;++i)if(cl[i]!=cr[i]){
- std::sort(cl[i],cr[i],cmp);
- for(int p=;p<cc[i];++p){
- int x=cl[i][p],y=cl[i][p-],z=lca(x,y);
- ++v[x];++v[y];v[z]-=;
- }
- }
- f3();
- printf("%d",ans);
- return ;
- }
bzoj1760 [Baltic2009]Triangulation的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Delaunay Triangulation in OpenCascade
Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算 ...
- bzoj1355: [Baltic2009]Radio Transmission
将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cs ...
- bzoj 1761: [Baltic2009]beetle 区间dp
1761: [Baltic2009]beetle Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 255 Solved: 92[Submit][Statu ...
- BZOJ 1355: [Baltic2009]Radio Transmission( kmp )
自己YY一下可以发现answer = n - fail[ n ] ------------------------------------------------------------------ ...
- uva 1331 - Minimax Triangulation(dp)
option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4077&mosm ...
- OpenCASCADE BRepMesh - 2D Delaunay Triangulation
OpenCASCADE BRepMesh - 2D Delaunay Triangulation eryar@163.com Abstract. OpenCASCADE package BRepMes ...
- BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 792 Solved: 535 ...
- [Baltic2009]Radio Transmission
bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time ...
随机推荐
- JMS生产者+单线程发送-我们到底能走多远系列(29)
我们到底能走多远系列(29) 扯淡: “然后我俩各自一端/望着大河弯弯/终于敢放胆/嘻皮笑脸/面对/人生的难” --- <山丘> “迎着风/迎向远方的天空/路上也有艰难/也有那解 ...
- 获取元素高度及定位js
<script type="text/javascript"> $(window).scroll(f ...
- mysql导入sql文件过大或连接超时的解决办法
前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了.至今屡试不爽. 1 2 3 4 5 6 7 set global max ...
- 将Excel生成实体类
package com.excel.test; import java.util.List; public class createUtil { public static String append ...
- Apache的虚拟主机配置
使用虚拟主机要先取消中心主机,注释掉DocumentRoot #DocumentRoot "/www/htdoc" 虚拟主机的单独配置: 用户认证 访问日志 错误日志 别名 脚本别 ...
- hdu5443(2015长春赛区网络赛1007)暴力
题意:给了一个数列,有多个询问,每个询问求某个区间内的最大值 数列长度 1000,询问个数 1000,静态,并不需要RMQ这些,直接暴力 n2 查找每个询问区间取最大值就行了. #include< ...
- [BeiJing2010组队][BZOJ 1977]次小生成树 Tree
话说这个[BeiJing2010组队]是个什喵玩意? 这是一道严格次小生成树,而次小生成树的做法是层出不穷的 MATO IS NO.1 的博客里对两种算法都有很好的解释,值得拥有: (果然除我以外, ...
- eclipse使用jetty插件出现内存溢出解决方案
系统运行在MAVEN中的jetty插件下,当在ECLIPSE运 clean jetty:run时系统提示 OutOfMemoryError: PermGen space. 解决办法:设置run as ...
- caffe: train error: Serializing 25 layers--- Check failed: proto.SerializeToOstream(&output)
I0221 21:47:41.826748 6797 solver.cpp:259] Train net output #0: loss = 0.00413362 (* 1 = 0.0041 ...
- HTML5 拖放(Drag 和 Drop)
拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. <!DOCTYPE HTML> <html> <hea ...