• BZOJ4419: [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条记录发生之后,每个用户分别看到了多少条消息。

    Input

    第1行2个整数n,m。
    接下来m行,按时间顺序读入m条记录,每条记录的格式如题目所述,用空格隔开。

    Output

    输出一行n个用空格隔开的数(行末无空格),第i个数表示用户i最后看到了几条消息。

    Sample Input

    2 8
    ! 1
    ! 2
    + 1 2
    ! 1
    ! 2
    - 1 2
    ! 1
    ! 2

    Sample Output

    1 1
    只有第4和第5条记录对应的消息被看到过。其他消息发送时,1和2不是好友。

    对100%的数据,N<=200000,M<=500000

    Solution

    做法:暴力

    当然$set$也可以,但是暴力更快

    保存下来每个操作

    然后倒着扫一遍,在遇到$-$的时候就分别减去对方发的信息数

    在遇到$+$的时候就分别加上对方发的信息数

    效率$O(m)$

    然而前排那些$200ms$的到底是怎么跑出来的orz

    #include <bits/stdc++.h>
    
    using namespace std ;
    
    #define N 500010
    
    int n , m , ans[ N ] ;
    char ch[ N ][ 10 ] ;
    int a[ N ] , b[ N ] ;
    int now[ N ] ;
    
    int main() {
        scanf( "%d%d" , &n , &m ) ;
        for( int i = 1 ; i <= m ; i ++ ) {
            scanf( "%s%d" , ch[ i ] , &a[ i ] ) ;
            if( ch[ i ][ 0 ] != '!' ) scanf( "%d" , &b[ i ] ) ;
        }
        for( int i = m ; i ; i -- ) {
            if( ch[ i ][ 0 ] == '!' ) {
                now[ a[ i ] ] ++ ;
            }else {
                int t1 = now[ a[ i ] ] , t2 = now[ b[ i ] ] ;
                if( ch[ i ][ 0 ] == '-' ) {
                    ans[ a[ i ] ] -= t2 ;
                    ans[ b[ i ] ] -= t1 ;
                }else {
                    ans[ a[ i ] ] += t2 ;
                    ans[ b[ i ] ] += t1 ;
                }
            }
        }
        for( int i = 1 ; i <= n ; i ++ ) printf( "%d " , ans[ i ] ) ;
        return 0 ;
    } 
  • 相关阅读:
    js实现快速排序
    vue+Elementui表单验证基本使用
    angular 报错 Cannot assign to a reference or variable!
    nz-table复选功能改造(整行可选)
    angular在父组件设置子组件样式
    angular6路由参数的传递与获取
    上下滚动,头部固定,左右滚动,左侧边栏固定布局
    TimePicker
    angular配置懒加载路由的思路
    angular实现draggable拖拽
  • 原文地址:https://www.cnblogs.com/henry-1202/p/BZOJ4419.html
Copyright © 2020-2023  润新知