Description

给定d张无向图,每张图都有n个点。一开始,在任何一张图中都没有任何边。接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边。你需要在每次操作之后输出有序数对(a,b)的个数,使得1<=a,b<=n,且a点和b点在d张图中都连通。
Input

第一行包含三个正整数d,n,m(1<=d<=200,1<=n<=5000,1<=m<=1000000),依次表示图的个数,点的个数和操作的个数。
接下来m行,每行包含三个正整数a,b,k(1<=a,b<=n,1<=k<=d),依次描述每一个操作。
Output

输出m行m个正整数,依次表示每次操作之后满足条件的有序数对(a,b)的个数。
Sample Input

3 4 10

1 2 1

2 1 2

1 2 3

3 4 1

1 3 2

2 3 3

2 4 2

3 4 3

3 4 2

1 3 1
Sample Output

4

4

6

6

6

6

6

8

8

16

HINT

Source

By Claris

友情提示:这题卡unsigned int 的自然溢出,不卡unsigned long long的自然溢出

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 5010
#define T 210
#define U unsigned long long
#define P 793999
#define GET (ch>='0'&&ch<='9')
#define base 60383
using namespace std;
int d,n,m,top;
U Pow[T],hash[MAXN];
int ans;
void in(int &x)
{
    char ch=getchar();x=0;
    while (!GET)    ch=getchar();
    while (GET) x=x*10+ch-'0',ch=getchar();
}
struct edge
{
    int to;
    U w;
    edge *next;
}e[T*MAXN<<1],*prev[T][MAXN];
void insert(int d,int u,int v)  {   e[++top].to=v;e[top].next=prev[d][u];prev[d][u]=&e[top];    }
int f[T][MAXN],size[T][MAXN];
void dfs(int d,int x,int last,int fa);
void Union(int d,int x,int y)
{
    if (f[d][x]==f[d][y])   return;
    if (size[d][f[d][x]]>size[d][f[d][y]])  swap(x,y);
    size[d][f[d][y]]+=size[d][f[d][x]];
    insert(d,x,y);insert(d,y,x);
    dfs(d,x,y,f[d][y]);
}
int Top;
struct Hash_Table
{
    U w;
    int cnt;
    Hash_Table *next;
}E[MAXN],*Prev[P+10],*sta[MAXN];
void ins(U v)
{
    U t=v%P;Hash_Table *i=Prev[t];
    for (;i;i=i->next)  if (i->w==v)    {   ans+=(i->cnt<<1)+1;i->cnt++;return; }
    ans++;Hash_Table* j=sta[Top--];
    j->w=v;j->cnt=1;j->next=Prev[t];Prev[t]=j;
}
void del(U v)
{
    U t=v%P;Hash_Table *i=Prev[t],*j=i;
    if (i->w==v)
    {        ans-=(i->cnt<<1)-1;
        if (!(--i->cnt))    sta[++Top]=i,Prev[t]=sta[Top]->next;
        return;
    }
    for (i=i->next;i;j=i,i=i->next)
        if (i->w==v)
        {            ans-=(i->cnt<<1)-1;
            if (!(--i->cnt))    sta[++Top]=i,j->next=i->next;
            return;
        }
}
void dfs(int d,int x,int last,int fa)
{
    del(hash[x]);
    hash[x]-=Pow[d]*f[d][x];f[d][x]=fa;
    hash[x]+=Pow[d]*f[d][x];ins(hash[x]);
    for (edge *i=prev[d][x];i;i=i->next)    if (i->to!=last)    dfs(d,i->to,x,fa);
}
int main()
{
    in(d);in(n);in(m);Pow[0]=1;int u,v,w;
    for (int i=1;i<=d;i++)  Pow[i]=Pow[i-1]*base;
    for (int i=1;i<=n;i++)  sta[++Top]=&E[i];
    for (int i=1;i<=n;ins(hash[i++]))
        for (int j=1;j<=d;j++)  f[j][i]=i,size[j][i]=1,hash[i]+=Pow[j]*i;
    while (m--)
    {        in(u);in(v);in(w);Union(w,u,v);
        printf("%d\n",ans);
    }
}

【ONTAK2015】【BZOJ4298】Bajtocja相关推荐

  1. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  2. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  3. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  4. (四)Asp.net web api中的坑-【api的返回值】

    (四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...

  5. 【C++】【九】栈的应用

    [C++][九]栈的应用 就近匹配原理及其步骤: 中缀转后缀:

  6. 【跃迁之路】【495天】程序员高效学习方法论探索系列(实验阶段252-2018.06.15)...

    @(跃迁之路)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. ...

  7. (10)Spring Boot修改端口号【从零开始学Spring Boot】

    Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入: server.port=9090 常用配置: #### ...

  8. 【跃迁之路】【725天】程序员高效学习方法论探索系列(实验阶段482-2019.2.15)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. 我将开源我的学习方 ...

  9. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  10. 【跃迁之路】【554天】程序员高效学习方法论探索系列(实验阶段311-2018.08.13)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,, 每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后 ...

最新文章

  1. IBM GSA Senior DBA招聘
  2. 红帽Redhat6.4 iso下载地址
  3. upgrade mysql client_The mysql_upgrade client is now deprecated(mysql_upgrade客户机现在已经弃用)...
  4. 在linux下实现拓扑排序,数据结构——有向图(拓扑排序算法)
  5. protect a health
  6. djangohttp://127.0.0.1:8000/media/test.jpg直接显示图片media配置
  7. java给文件添加水印_Java在PDF中添加水印(文本/图片水印)
  8. 求解汉诺塔问题(提示, 使用递归)
  9. python字典存储数据的形式_python字典的常用操作,数据类型划分
  10. 9、ffplay音频的波谱图及频谱图源码分析
  11. Objective-C 信息传递模型 [ ] 发送消息
  12. tms xdata、sparkle服务运行时显示拒绝访问的错误
  13. please select a valid python interpreter(请选择一个解释器)
  14. 读《写给大家看的色彩书1》.设计配色基础1
  15. 穿山甲 groMore 配置广告位 穿山甲/优良汇
  16. 主成分分析(PCA)原理分析Python实现
  17. 三菱PLC以太网MC通讯协议模块
  18. PHPMYSQL物联网监控系统Web端
  19. Android开发经验谈:微信小程序的事件处理,灵魂拷问
  20. 前端实习生需要到达什么水平?

热门文章

  1. ftpclient查看服务器文件,使用Apache FtpClient在FTP服务器中计算文件校验和
  2. 模糊神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据分类(提供MATLAB代码)
  3. Meta Learning/Learning to Learn, 到底我们要学会学习什么?||介绍了几篇元学习文章
  4. openjudge 拯救行动
  5. 【第1111期】Subresource Integrity 介绍
  6. 图灵机2:等价变形+算法定义
  7. P1462 通往奥格瑞玛的道路(二分+dijkstra)
  8. unity中控制游戏物体移动最基本的三种方法
  9. 【历史上的今天】11 月 20 日:微软发布 Windows 1.0;Lotus Notes 发明者出生;奔腾4 诞生
  10. 计算机网络和办公室自动化设备管理,通讯、计算机信息(含互联网)及办公自动化设备的安全保密管理暂行规定...