设f[i][j]为第i张图中j点所在连通块的编号,加边时可以通过启发式合并在$O(dn\log n)$的时间内维护出来。

对于每个点,设h[i]为f[j][i]的hash值,若两个点hash值相等,则它们在d张图中均连通。

#include<cstdio>
typedef unsigned long long ll;
const int D=200,N=5002,M=262143;
int d,n,m,i,j,x,y,z,ans;
int f[D][N],s[D][N],g[D][N],v[D*N*2],nxt[D*N*2],ed;
ll pow[D],h[N];
struct E{ll v;int w,nxt;}e[N];
int G[M+1],res[N],cur;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int z,int x,int y){v[++ed]=y;nxt[ed]=g[z][x];g[z][x]=ed;}
inline void ins(ll v){int u=v&M,i=G[u];for(;i;i=e[i].nxt)if(e[i].v==v){ans+=e[i].w*2+1;e[i].w++;return;}ans++,e[i=res[cur--]].v=v,e[i].w=1,e[i].nxt=G[u],G[u]=i;
}
inline void del(ll v){int u=v&M,i=G[u],j=i;if(e[i].v==v){ans-=e[i].w*2-1;if(!(--e[i].w))G[u]=e[res[++cur]=i].nxt;return;}for(i=e[i].nxt;i;j=i,i=e[i].nxt)if(e[i].v==v){ans-=e[i].w*2-1;if(!(--e[i].w))e[j].nxt=e[res[++cur]=i].nxt;return;}
}
void dfs(int z,int x,int y,int t){del(h[x]);h[x]-=pow[z]*f[z][x];f[z][x]=t;ins(h[x]+=pow[z]*t);for(int i=g[z][x];i;i=nxt[i])if(v[i]!=y)dfs(z,v[i],x,t);
}
inline void merge(int z,int x,int y){if(f[z][x]==f[z][y])return;if(s[z][f[z][x]]>s[z][f[z][y]]){int t=x;x=y;y=t;}s[z][f[z][y]]+=s[z][f[z][x]];add(z,x,y),add(z,y,x);dfs(z,x,y,f[z][y]);
}
int main(){read(d),read(n),read(m);for(pow[0]=i=1;i<d;i++)pow[i]=pow[i-1]*10007;for(i=1;i<=n;i++)res[++cur]=i;for(i=1;i<=n;ins(h[i++]))for(j=0;j<d;j++)f[j][i]=i,s[j][i]=1,h[i]+=pow[j]*i;while(m--)read(x),read(y),read(z),merge(--z,x,y),printf("%d\n",ans);return 0;
}

  

BZOJ4298 : [ONTAK2015]Bajtocja相关推荐

  1. 【ONTAK2015】【BZOJ4298】Bajtocja

    Description 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边.你需要在每次操 ...

  2. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  3. BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组

    4278: [ONTAK2015]Tasowanie Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 426  Solved: 199 [Submit ...

  4. [ONTAK2015]Związek Harcerstwa Bajtockiego

    [ONTAK2015]Związek Harcerstwa Bajtockiego 题目大意: 一棵\(n(n\le10^6)\)个点的树,从\(m\)出发,依次执行\(k(k\le10^6)\)条操 ...

  5. 【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA

    [BZOJ4281][ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点.之后 ...

  6. BZOJ4245 : [ONTAK2015]OR-XOR

    按位考虑,逐步确定答案. 设当前是第i位,求出第i位的前缀异或和. 若存在m个0且所有数字异或和为0,那么答案的这一位可以为0,并把所有1的位置给标记为不可选. 否则答案的这一位只能是1. 时间复杂度 ...

  7. BZOJ4280 : [ONTAK2015]Stumilowy sad

    线段树每个区间维护上下界以及要整体增加的标记即可,时间复杂度$O(m\log n)$. #include<cstdio> #define inf 1500000000 int n,m,op ...

  8. BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 居然把后缀数组写成n^2的..我真厉害.. 想了无数种方法,最后发现就是 ...

  9. bzoj 4278 [ONTAK2015]Tasowanie——后缀数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4278 因为每次要放后缀较小的那个,所以把两个序列放在一起排序吧.改一改模板. 其实要改的地方 ...

最新文章

  1. IOS8中SWIFT 弹出框的显示
  2. 【Java】牛客网 链表分割
  3. ABAP利用OLE2_OBJECT实现将数据输出到Excel单元格
  4. python在线投票系统 统计票数_分层分平台,让每个学生享受教育公平 ——冯敬益老师的Python编程教学探索...
  5. IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
  6. hp服务器330g6怎么安装系统,Hp DL380 g6 安装WIN2003的图文方法
  7. Golang并发模型:轻松入门协程池
  8. Python os 属性(便于跨平台开发)
  9. Gitter - 高颜值GitHub小程序客户端诞生记
  10. C#的多线程机制探索2
  11. 网页中播放FLV文件的代码
  12. GNS3全面详解系列-GNS3的前世今生
  13. Spring Boot 之 RESRful API 权限控制
  14. SQL Server 数据库之启动 SQL Server 2008 服务
  15. bindingResult
  16. 是什么意思怎么读_知识丨南无怎么读?是什么意思?
  17. 怎么制作游戏脚本_怎么剪游戏视频?五步教你制作绝地求生击杀合集
  18. golang读取文件案例
  19. No serializer found for class com.xxx and no properties discovered to create BeanSerializer
  20. 参加 TechEd 2004

热门文章

  1. NIOS2 DMA 传输模式
  2. 甲骨文第四财季SAAS和PAAS收入增长66%
  3. 深入剖析-关于分页语句的性能优化
  4. 关于ospf区域认证以及虚链路之间的配置问题
  5. IBM整合管理服务:云时代驱动IT服务创新
  6. Emacs for Go
  7. extract ,eval的用法
  8. C#的委托事件在winform窗体中实现传值备忘
  9. linux常见问题解答汇总
  10. 使用MakeCAB.exe命令创建CAB文件