【优化AC】建立联系
建立联系
【试题描述】
新学期开始了,不料同学们在假期集体更换了电话,所以同学们只能重新建立联系。
班内一共有n位同学,他们一共建立了m次联系,老师想知道在同学们每次建立完一个联系后,一共有多少对同学可以互相联系。
【输入要求】
第一行有两个数n和m,表示有n位同学和m次操作。
以后m行,每行两个数a和b,分别表示a号同学与b号同学之间建立了联系。
【输出要求】
输出共有m行,每行一个整数,表示第m次操作后共有多少对同学可以互相联系。
【输入实例】
5 6
1 2
2 3
4 5
1 3
2 4
4 5
【输出实例】
1
3
4
4
10
10
【其他说明】
1<=n,m<=100000
【试题分析】
为啥叫所谓的“优化AC”呢?很简单,因为只有按照优化的方法写代码才能AC,否则结果错误,并查集“敌人”那道题就是要这样的方法解决,但是不优化之前就是时间超限。维护每个并查集的大小。我们具体来看看代码。
【代码】
#include<iostream>
using namespace std;
long long x,y,f[100001],n,m,size[100001],ans;
int find(int x)
{
if (f[x]==x) return f[x];
return f[x]=find(f[x]);
}
void merge(int v,int u)
{
int t1,t2;
t1=find(v);
t2=find(u);
if(t1!=t2) {f[t2]=t1;size[t1]+=size[t2];} //合并并查集之后并查集的大小要随之增加
return ;
}
inline long long read()
{
long long x,f=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(x=ch-'0';isdigit(ch=getchar());x=x*10+ch-'0');
return x*f;
}
inline void write(long long x)
{
if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++) f[i]=i,size[i]=1;
for(int i=1;i<=m;i++)
{
x=read(),y=read();
if(find(x)!=find(y)) {ans+=size[find(x)]*size[find(y)];merge(x,y);}//需合并两个并查集,为以后查询做准备
write(ans);
printf("\n");//不要忘了write中没有回车!!
}
}
【优化AC】建立联系的更多相关文章
- MongoDB优化,建立索引实例及索引机制原理讲解
MongoDB优化,建立索引实例及索引机制原理讲解 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样 ...
- 【uva1502/hdu4117-GRE Words】DP+线段树优化+AC自动机
这题我的代码在hdu上AC,在uva上WA. 题意:按顺序输入n个串以及它的权值di,要求在其中选取一些串,前一个必须是后一个的子串.问d值的和最大是多少. (1≤n≤2×10^4 ,串的总长度< ...
- SEO优化---学会建立高转化率的网站关键词库
想要优化好一个网站,行业的分析,以及关键词的挖掘是必要的,有一定的关键词排名了,但是转化率和流量方面却很不理想这种情况大部分是只注重了有指数的关键词排名,而忽略了长尾关键词和一些没有指数但是可以带来巨 ...
- mysql 索引优化,索引建立原则和不走索引的原因
第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定某条记录. 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是 ...
- ac自动机fail树上按询问建立上跳指针——cf963D
解法看着吓人,其实就是为了优化ac自动机上暴力跳fail指针.. 另外这题对于复杂度的分析很有学习价值 /* 给定一个母串s,再给定n个询问(k,m) 对于每个询问,求出长度最小的t,使t是s的子串, ...
- hdu_5507_GT and strings(AC自动机)
题目链接:hdu_5507_GT and strings 题意:给n个字符串和q个询问,每个询问给两个数字x,y,问1.x是否为y的子序列,2.x是否为y的子串,是输出1,否则输出0,每个询问输出2个 ...
- MySQL如何利用索引优化ORDER BY排序语句
MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...
- lucene、lucene.NET详细使用与优化详解
lucene.lucene.NET详细使用与优化详解 2010-02-01 13:51:11 分类: Linux 1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应 ...
- 中文分词系列(二) 基于双数组Tire树的AC自动机
秉着能偷懒就偷懒的精神,关于AC自动机本来不想看的,但是HanLp的源码中用户自定义词典的识别是用的AC自动机实现的.唉-没办法,还是看看吧 AC自动机理论 Aho Corasick自动机,简称AC自 ...
随机推荐
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- LeetCode Flip Game II
原题链接在这里:https://leetcode.com/problems/flip-game-ii/ 题目: You are playing the following Flip Game with ...
- awk 例子
awk 例子 打印本机swap分区总大小,格式如:Swap:1023M: free -m |awk '/Swap/{print $1,$2" M"}' 将当前目录下大于10K的文件 ...
- mysql学习笔记——支持存储引擎
- kernel 模块与简单 hello 模块
Kernel 模块与简单 hello 模块 kernel 模块的简介 Linux 内核进行扩展时,例如编写驱动程序.netfilter功能等,最方便的方式是通过编写模块,然后加载到内核中.由于 ker ...
- Android --Search界面样式
Lay_Weight 权重属性的使用 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- Netty中BIO,NIO
同步阻塞io(BIO).伪异步io(PIO).非阻塞io(NIO).异步io(AIO)的概念及区别? 同步阻塞io(BIO):服务器端与客户端通过三次握手后建立连接,连接成功,双方通过I/O进行同步阻 ...
- 第三篇 Replication:事务复制-发布服务器
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...
- status 状态栏
http://www.pchou.info/ios/2015/08/22/oc-statusbar.html IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏.控制状态栏的文字颜色等,导 ...
- javascript 函数返回值(return)、定时器(setTimeout、setInterval)
一.函数的返回值:return 1.函数名+括号=return后面的值 <script> function fn1(){ return 100; } alert(fn1()); // 10 ...