4419: [Shoi2013]发微博

本文介绍了一个关于社交网络的好友关系与微博发布活动的模拟问题,并通过使用集合存储好友关系及采用前缀和思想来优化计算每位用户接收到的消息数量。

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条记录发生之后,每个用户分别看到了多少条消息。
题解:
对于每个点用set存储它的好友关系。
但如果每发一次微博就统计一遍它的好友明显TLE。
于是TYB大佬告诉我可以用前缀和思想,
每加入一条边x->y,对于x,先减去y之前发的微博,
                                对于y,先减去x之前发的微博,
最后再加上发的微博数就可以求出这段时间内发的微博数了。
大概就是这样吧。(表述能力太菜,不懂的话可以看代码)
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
const int N=200010;
int n,m;
struct node{
	set<int>q;
}sa[N];
char s[10];
int sum[N],a[N];
int main()
{
	scanf("%d%d",&n,&m);
	//for(int i=1;i<=n;i++) sa[i].sum=0;
	int x,y;
	for(int i=1;i<=m;i++)
	{
		scanf("%s",s);
		if(s[0]=='!')
		{
			scanf("%d",&x);
			a[x]++;
			/*for(set<int>::iterator j=sa[x].q.begin();j!=sa[x].q.end();j++)
			sa[*j].sum++;*/
			
		}
		if(s[0]=='+')
		{
			scanf("%d%d",&x,&y);
			sum[x]-=a[y];
			sum[y]-=a[x];
			sa[x].q.insert(y);
			sa[y].q.insert(x);
		}
		if(s[0]=='-')
		{
			scanf("%d%d",&x,&y);
			sum[x]+=a[y];
			sum[y]+=a[x];
			sa[x].q.erase(y);
			sa[y].q.erase(x);
		}
	}
	for(int x=1;x<=n;x++)
	for(set<int>::iterator j=sa[x].q.begin();j!=sa[x].q.end();j++)
	sum[x]+=a[*j];
	for(int i=1;i<n;i++)
	printf("%d ",sum[i]);
	printf("%d",sum[n]);
}

打着打着突然拉起了防空警报吓死蒟蒻了,
才发现今天是9.18,
勿忘国耻,振兴中华!
考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值