zoukankan      html  css  js  c++  java
  • bzoj4419 发微博

    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最后看到了几条消息。

    维护每人发出的信息数,每人的好友,和每人收到的信息数减去当前所有好友发出信息数之和。

    最后根据最终的好友更新一次答案。

    #include<cstdio>
    #include<set>
    int n,m,c,x,y;
    std::set<int>vs[200005];
    int t[200005],a[200005];
    int main(){
        scanf("%d%d",&n,&m);
        while(m--){
            scanf(" %c %d",&c,&x);
            if(c=='!')++t[x];
            else if(c=='+'){
                scanf("%d",&y);
                vs[x].insert(y);
                vs[y].insert(x);
                a[x]-=t[y];
                a[y]-=t[x];
            }else{
                scanf("%d",&y);
                vs[x].erase(vs[x].find(y));
                vs[y].erase(vs[y].find(x));
                a[x]+=t[y];
                a[y]+=t[x];
            }
        }
        for(int i=1;i<=n;i++){
            for(std::set<int>::iterator j=vs[i].begin();j!=vs[i].end();++j){
                a[*j]+=t[i];
            }
        }
        if(n)printf("%d",a[1]);
        for(int i=2;i<=n;i++)printf(" %d",a[i]);
        return 0;
    }
  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/ccz181078/p/5245116.html
Copyright © 2011-2022 走看看