[BZOJ 4419][Shoi2013]发微博
4419: [Shoi2013]发微博
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 665 Solved: 364
[Submit][Status][Discuss]Description
刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录:! x 表示用户x发了一条微博;+ x y 表示用户x和用户y成为了好友- x y 表示用户x和用户y解除了好友关系当一个用户发微博的时候,所有他的好友(直接关系)都会看到他的消息。假设最开始所有人之间都不是好友关系,记录也都是合法的(即+ x y时x和y一定不是好友,而- x y时x和y一定是好友)。问这m条记录发生之后,每个用户分别看到了多少条消息。Input
第1行2个整数n,m。接下来m行,按时间顺序读入m条记录,每条记录的格式如题目所述,用空格隔开。Output
输出一行n个用空格隔开的数(行末无空格),第i个数表示用户i最后看到了几条消息。Sample Input
2 8
! 1
! 2
+ 1 2
! 1
! 2
- 1 2
! 1
! 2Sample Output
1 1
只有第4和第5条记录对应的消息被看到过。其他消息发送时,1和2不是好友。对100%的数据,N<=200000,M<=500000
题解
可以通过差分来进行维护操作. 我们可以考虑先开一个数组维护每一个用户当前发的信息数量, 然后再想办法快速维护某个用户的好友列表(可以偷懒用 $std::set$ 维护)
差分的时候可以在加边的时候让对方的差分数据减去当前发过的信息数量, 删边的时候加上当前发过的信息数量. 最后统计答案的时候统一将所有好友发过的信息数量加上之前维护的差分数量就可以正确排斥非好友状态的信息了.
参考代码
GitHub
#include <set>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MAXN=2e5+; int n;
int m;
int ans[MAXN];
int cnt[MAXN];
int delta[MAXN];
std::set<int> lk[MAXN]; char buf[]; int main(){
int n,m;
int a,b;
scanf("%d%d",&n,&m);
for(int i=;i<m;i++){
scanf("%s",buf);
if(*buf=='!'){
scanf("%d",&a);
cnt[a]++;
}
else if(*buf=='+'){
scanf("%d%d",&a,&b);
delta[a]-=cnt[b];
delta[b]-=cnt[a];
lk[a].insert(b);
lk[b].insert(a);
}
else if(*buf=='-'){
scanf("%d%d",&a,&b);
delta[a]+=cnt[b];
delta[b]+=cnt[a];
lk[a].erase(b);
lk[b].erase(a);
}
}
for(int i=;i<=n;i++){
for(std::set<int>::iterator it=lk[i].begin();it!=lk[i].end();++it){
ans[*it]+=cnt[i];
}
}
printf("%d",ans[]+delta[]);
for(int i=;i<=n;i++){
printf(" %d",ans[i]+delta[i]);
}
putchar('\n');
return ;
}
Backup
[BZOJ 4419][Shoi2013]发微博的更多相关文章
- BZOJ 4419: [Shoi2013]发微博 set模拟
4419: [Shoi2013]发微博 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4419 Description 刚开通的SH微博共 ...
- 【BZOJ4419】[SHOI2013]发微博(???)
[BZOJ4419][SHOI2013]发微博(???) 题面 BZOJ 洛谷 题解 一道\(easy\),每个点维护一下要给周围的点加上多上,如果额外连了一个点进来就给他把标记减掉,如果删掉了一条边 ...
- 洛谷 P3998 [SHOI2013]发微博
洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...
- P3998 [SHOI2013]发微博 方法记录
原题链接 [SHOI2013]发微博 题目描述 刚开通的 SH 微博共有 \(n\) 个用户(\(1\sim n\) 标号),在这短短一个月的时间内,用户们活动频繁,共有 \(m\) 条按时间顺序的记 ...
- bzoj4419[SHOI2013]发微博
题意:给你一个初始没有边,点权均为0的无向图,三种操作:加边,删边,选择一个点将当前与之相邻的点(不包括自身)的点权+1,询问最后所有点的点权. 据说正解是set维护每个人的朋友,然后考虑每次加边.删 ...
- BZOJ4419: [Shoi2013]发微博 暴力
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用 ...
- BZOJ4419:[SHOI2013]发微博(乱搞)
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用 ...
- [SHOI2013]发微博
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x ...
- 【bzoj4419】[Shoi2013]发微博 STL-set
题目描述 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用户y成为了好友 ...
随机推荐
- org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
1.错误描述 org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir svn: Co ...
- Struts 有哪些常用标签库
Struts 有哪些常用标签库 1.html标签库 2.bean标签库 3.logic标签库
- Java中的表达式运算
1.问题背景 以下代码运行的结果为: A.a的值:8 b的值:7 B.a的值:8 b的值:8 C.a的值:9 b的值:7 D.a的值 ...
- C# md5加密方法
public static string md5(string str, int code) { if (code == 16) //16位MD5加密(取32位加密的9~25字符) { return ...
- 芝麻HTTP:Flask的安装
Flask是一个轻量级的Web服务程序,它简单.易用.灵活,这里主要用来做一些API服务. 1. 相关链接 GitHub:https://github.com/pallets/flask 官方文档:h ...
- iOS - XMPP Openfire 服务器的搭建
前言 提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提前准备好的软件: jdk-8u91-macosx-x64.dmg mysql-5.7 ...
- 《Master Bitcoin》学习笔记01
前言 关于比特币入门,其运行原理(理解性描述),什么是挖矿,还有一些学习资料的整理,详见此博客链接 第一章讲比特币的历史,算是导入,上面的博客链接有概括. 第二章举了使用比特币交易的例子,其中介绍了一 ...
- 初学者第二节之HelloWorld
ava具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点.Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. 一.首先创建一个Hell ...
- 【BZOJ1003】物流运输(动态规划,最短路)
[BZOJ1003]物流运输(动态规划,最短路) 题面 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司 ...
- SPOJ3267:D-query
题面 SPOJ3267 Sol 给定\(N\)个正整数构成的序列,将对于指定的闭区间查询其区间内的不同的数的个数 主席树 不是权值线段树 维护位置 如果插入一个数时发现之前有过了 那么修改当前的,那个 ...