BZOJ4298 : [ONTAK2015]Bajtocja
设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相关推荐
- 【ONTAK2015】【BZOJ4298】Bajtocja
Description 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边.你需要在每次操 ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
- BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组
4278: [ONTAK2015]Tasowanie Time Limit: 10 Sec Memory Limit: 256 MB Submit: 426 Solved: 199 [Submit ...
- [ONTAK2015]Związek Harcerstwa Bajtockiego
[ONTAK2015]Związek Harcerstwa Bajtockiego 题目大意: 一棵\(n(n\le10^6)\)个点的树,从\(m\)出发,依次执行\(k(k\le10^6)\)条操 ...
- 【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA
[BZOJ4281][ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点.之后 ...
- BZOJ4245 : [ONTAK2015]OR-XOR
按位考虑,逐步确定答案. 设当前是第i位,求出第i位的前缀异或和. 若存在m个0且所有数字异或和为0,那么答案的这一位可以为0,并把所有1的位置给标记为不可选. 否则答案的这一位只能是1. 时间复杂度 ...
- BZOJ4280 : [ONTAK2015]Stumilowy sad
线段树每个区间维护上下界以及要整体增加的标记即可,时间复杂度$O(m\log n)$. #include<cstdio> #define inf 1500000000 int n,m,op ...
- BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 居然把后缀数组写成n^2的..我真厉害.. 想了无数种方法,最后发现就是 ...
- bzoj 4278 [ONTAK2015]Tasowanie——后缀数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4278 因为每次要放后缀较小的那个,所以把两个序列放在一起排序吧.改一改模板. 其实要改的地方 ...
最新文章
- IOS8中SWIFT 弹出框的显示
- 【Java】牛客网 链表分割
- ABAP利用OLE2_OBJECT实现将数据输出到Excel单元格
- python在线投票系统 统计票数_分层分平台,让每个学生享受教育公平 ——冯敬益老师的Python编程教学探索...
- IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
- hp服务器330g6怎么安装系统,Hp DL380 g6 安装WIN2003的图文方法
- Golang并发模型:轻松入门协程池
- Python os 属性(便于跨平台开发)
- Gitter - 高颜值GitHub小程序客户端诞生记
- C#的多线程机制探索2
- 网页中播放FLV文件的代码
- GNS3全面详解系列-GNS3的前世今生
- Spring Boot 之 RESRful API 权限控制
- SQL Server 数据库之启动 SQL Server 2008 服务
- bindingResult
- 是什么意思怎么读_知识丨南无怎么读?是什么意思?
- 怎么制作游戏脚本_怎么剪游戏视频?五步教你制作绝地求生击杀合集
- golang读取文件案例
- No serializer found for class com.xxx and no properties discovered to create BeanSerializer
- 参加 TechEd 2004