[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成为了好友 ...
随机推荐
- Exynos4412交叉编译环境搭建
Exynos4412交叉编译环境搭建 交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发.编译速度. 环境: Tiny4412SDK1506开发板 需要软件: arm-linux- ...
- 初识 systemd
从 init 系统说起 linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化.内核初始化的最后一步就是启动 PID ...
- iOS - IM 即时通讯
1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...
- 促进客户转化,提高客单价!酷客多小程序发布版本V1.0.9!
商户和企业主的又一次福音!酷客多小程序新零售o2o商城系统酷爱用户,为了追求极致的用户体验,没日没夜地沉浸于新功能的开发,经过一番努力,新功能终于上线啦! 此次版本迭代,在原有功能基础上做了大幅提升, ...
- java 值传递和引用传递
public class PassValue { /** * 值传递 基本数据类型参数 * 值传递:方法调用时,实际参数吧他的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值 */ ...
- JavaScript函数与对象
函数 函数的定义 JavaScript中的函数和Python中的非常类似,只是定义方式有点区别. // 普通函数定义 function f1() { console.log("Hello w ...
- 【BZOJ4653】【NOI2016】区间(线段树)
[BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...
- tomcat环境配置 Linux 与 Windows
Windows:例如tomcat安装在 E:\tomcat 需要在环境变量配置:CATALINA_HOME=E:\tomcat CATALINA_BASE= E:\tomcat Linux:例如tom ...
- python之hasattr()、 getattr() 、setattr() 函数
这三个方法可以实现反射和内省机制,在实际项目中很常用,功能也很强大. [转]http://www.cnblogs.com/cenyu/p/5713686.html hasattr(object, na ...
- Python爬虫获取异步加载站点pexels并下载图片(Python爬虫实战3)
1. 异步加载爬虫 对于静态页面爬虫很容易获取到站点的数据内容,然而静态页面需要全量加载站点的所有数据,对于网站的访问和带宽是巨大的挑战,对于高并发和大访问访问量的站点来说,需要使用AJAX相关的技术 ...