设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. 【BZOJ4298】[ONTAK2015]Bajtocja

    [BZOJ4298][ONTAK2015]Bajtocja Description 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有m次操作,每次操作会给出a,b,k,意 ...

  2. BZOJ.4298.[ONTAK2015]Bajtocja(Hash 启发式合并)

    题目链接 \(Description\) 给定\(d\)张无向图,每张图都有\(n\)个点.一开始,在任何一张图中都没有任何边. 接下来有\(m\)次操作,每次操作会给出\(a,b,k\),意为在第\ ...

  3. bzoj 4298 [ONTAK2015]Bajtocja——哈希+启发式合并

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4298 题面: 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有 ...

  4. @bzoj - 4298@ [ONTAK2015]Bajtocja

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任 ...

  5. bzoj AC倒序

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

  6. BZOJ 4245: [ONTAK2015]OR-XOR

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 492  Solved: 269[Submit][Sta ...

  7. BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]

    4276: [ONTAK2015]Bajtman i Okrągły Robin 题意:\(n \le 5000\)个区间\(l,r\le 5000\),每个区间可以选一个点得到val[i]的价值,每 ...

  8. [ONTAK2015]Związek Harcerstwa Bajtockiego

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

  9. [ONTAK2015]Tasowanie

    [ONTAK2015]Tasowanie 题目大意: 给你两个长度分别为\(n(n\le2\times10^5)\)的序列\(A,B\),将\(A,B\)进行二路归并,使得最后得到的序列字典序最小.求 ...

随机推荐

  1. 纹理缓存(Texture Cache)

    纹理缓存是将纹理缓存起来方便之后的绘制工作.每一个缓存的图像的大小,颜色和区域范围都是可以被修改的.这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU. CCTextureCache C ...

  2. C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html

    register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很 ...

  3. OpenGL实现三维立方体交互

    http://yunpan.cn/cs62JgxTNs98C  (提取码:668e)

  4. BZOJ 1058

    服气!我果然就是个傻逼. 傻兮兮地感觉两个数之间的差距无需删除一些答案,妈个鸡就只加入了一些新的答案忘记了去掉无效的答案.我果然是傻逼,经验不足脑子笨... 这么水的题...不说了,说多了都是泪. 自 ...

  5. Flatten Binary Tree to Linked List

    Flatten a binary tree to a fake "linked list" in pre-order traversal. Here we use the righ ...

  6. Js document.frmLogin.action = '/login.htm';的意义和form表单的target属性

    一.解答:就是把 这个id名为frmLogin的form的提交地址改为上面的/login.htm <form id="frmLogin" name="frmLogi ...

  7. python 列表转为字典的两个小方法

    1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','ke ...

  8. php 字符串负值判断

    2014年9月9日 11:54:54 $a = '-1'; $b = (int)$a; $c = is_numeric($a); if ($a) { echo 1; //echo 1 } else { ...

  9. MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持

    背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1 ...

  10. DFS:Lake Counting(POJ 2386)

    好吧前几天一直没更新博客,主要是更新博客的确是要耗费一点精力 北大教你数水坑 最近更新博客可能就是一点旧的东西和一些水题,主要是最近对汇编感兴趣了嘻嘻嘻 这一题挺简单的,没什么难度,简单深搜 #inc ...