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的更多相关文章
- 【BZOJ4298】[ONTAK2015]Bajtocja
[BZOJ4298][ONTAK2015]Bajtocja Description 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有m次操作,每次操作会给出a,b,k,意 ...
- BZOJ.4298.[ONTAK2015]Bajtocja(Hash 启发式合并)
题目链接 \(Description\) 给定\(d\)张无向图,每张图都有\(n\)个点.一开始,在任何一张图中都没有任何边. 接下来有\(m\)次操作,每次操作会给出\(a,b,k\),意为在第\ ...
- bzoj 4298 [ONTAK2015]Bajtocja——哈希+启发式合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4298 题面: 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边.接下来有 ...
- @bzoj - 4298@ [ONTAK2015]Bajtocja
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 4245: [ONTAK2015]OR-XOR
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 492 Solved: 269[Submit][Sta ...
- 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]的价值,每 ...
- [ONTAK2015]Związek Harcerstwa Bajtockiego
[ONTAK2015]Związek Harcerstwa Bajtockiego 题目大意: 一棵\(n(n\le10^6)\)个点的树,从\(m\)出发,依次执行\(k(k\le10^6)\)条操 ...
- [ONTAK2015]Tasowanie
[ONTAK2015]Tasowanie 题目大意: 给你两个长度分别为\(n(n\le2\times10^5)\)的序列\(A,B\),将\(A,B\)进行二路归并,使得最后得到的序列字典序最小.求 ...
随机推荐
- poj2253 最短路 floyd Frogger
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28825 Accepted: 9359 Descript ...
- 默认hosts后面为files dns
售后工程师 : 您好,问题已经解决,问题原因是您修改了/etc/nsswitch.conf配置文件中的hosts:这项导致的,默认hosts后面为files dns,但是后面去掉了DNS导致直接使用本 ...
- 【Redis】Redis分布式集群几点说道
Redis数据量日益增大,使用的公司越来越多,不仅用于做缓存,同时趋向于存储这一块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片 ...
- Count Primes
Count the number of prime numbers less than a non-negative number, n public int countPrimes(int n) { ...
- python 异常类型
1.NameError:尝试访问一个未申明的变量>>> vNameError: name 'v' is not defined 2.ZeroDivisionError:除数为0&g ...
- su成别的用户后仍以原来私钥访问远程机器
背景: 同步机和游戏服两台机都有个人用户账号和游戏账号xy1,游戏服设了xy1的ssh强制命令来受同步机的xy1控制.现在需要在同步机上用xy1进行一个控制游戏服的操作,该操作需要在同步机远程tail ...
- ubuntu下Tomcat7的安装和配置
和前几个软件一样,Tomcat 同样是由JAVA开发的,所以,在安装前一定要装好JDK. 大家可以到 http://tomcat.apache.org/download-70.cgi 下载最新的Tom ...
- 支持向量机(SVM)简介
主要内容 一:SVM简介 二:线性分类 三:分类间隔 四:核函数 五:松弛变量 SVM简介 支持向量机(support vector Machine)是由Cortes和Vapnik于1995年首先提出 ...
- 【学习笔记】移动Web手册(PPK力作)
又是好久没写博客了,最近把近半年的总结,全部总结到博客园吧.先写最近的一个移动端的学习笔记.毕竟移动端开发了一段时间,就写一写读<移动web手册>中,对我感触比较深的几个点—— 一.浏览器 ...
- Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据(转)
hadoop的hdfs文件系统中,默认的是utf-8, 故你上传的文件是要设置成utf-8.当输入的是gbk,有该如何? 输入是GBK文件, 输出也是 GBK 文件的示例代码: Hadoop处理GBK ...