给定一个多边形的三角剖分(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的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. Delaunay Triangulation in OpenCascade

    Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算 ...

  3. bzoj1355: [Baltic2009]Radio Transmission

    将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cs ...

  4. bzoj 1761: [Baltic2009]beetle 区间dp

    1761: [Baltic2009]beetle Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 255  Solved: 92[Submit][Statu ...

  5. BZOJ 1355: [Baltic2009]Radio Transmission( kmp )

    自己YY一下可以发现answer =  n - fail[ n ] ------------------------------------------------------------------ ...

  6. uva 1331 - Minimax Triangulation(dp)

    option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4077&mosm ...

  7. OpenCASCADE BRepMesh - 2D Delaunay Triangulation

    OpenCASCADE BRepMesh - 2D Delaunay Triangulation eryar@163.com Abstract. OpenCASCADE package BRepMes ...

  8. BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]

    1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 792  Solved: 535 ...

  9. [Baltic2009]Radio Transmission

    bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time ...

随机推荐

  1. CentOS 6.6 中设置Terminal快捷键

    排版比较乱,参见 https://www.zybuluo.com/Jpz/note/144583 CentOS 6.6 中设置Terminal快捷键 Linux开发环境配置 Terminal是Cent ...

  2. SAP系统联机应用程序帮助

    新安装好的SAP系统,联机帮助是不能用的. 通过菜单中的“帮助-应用程序帮助” 和“帮助-SAP库”都打不开任何帮助页面.这并不是因为SAPgui安装不完整,而是因为SAP的帮助系统本身就不包含在GU ...

  3. 徹底刪除atom

    rm -f ~/.atom rm -f /usr/local/bin/atom rm -f /usr/local/bin/apm rm -f /Applications/Atom.app rm -f ...

  4. linux下ftp常用命令

    1. Linux 终端连接FTP $ ftp 10.85.3.12 Name : fxm5547 Password: ftp> 如果FTP 允许匿名用户,那么用户名要输入anonymous,密码 ...

  5. my Style

    1. box-sizing语法: box-sizing : content-box || border-box || inherit 参数取值: content-box:此值为其默认值,其让元素维持W ...

  6. Vue.js相关知识3-路由

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. Ubuntu安装Mysql+Django+MySQLdb

    安装Mysql sudo apt-get install mysql-server mysql-client root@IdeaPad:/# mysql -u root -p Enter passwo ...

  8. Linux-Memcache分布式部署方案(magent代理解决单点故障)

    Memcached的特点 Memcached作为高速运行的分布式缓存服务器具有以下特点. 1. 协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式, 而是使用简单的基于文本的协议 ...

  9. 《Python自然语言处理》中文版-纠错【更新中。。。】

    最近在看<Python自然语言处理>中文版这本书,可能由于是从py2.x到py3.x,加上nltk的更新的原因,或者作者的一些笔误,在书中很多代码都运行不能通过,下面我就整理一下一点有问题 ...

  10. 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项

    Win7 64位 IIS未能加载文件或程序集"System.Data.SQLite"或它的某一个依赖项 未能加载文件或程序集"System.Data.SQLite&quo ...