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

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4419

    【题解】

    这是直接关系啊。。。

    用n个set维护每个人的朋友关系,a[i]表示i在现在的时候发微博数量,那么添加的时候ans[x]-=a[y],删除的时候ans[x]+=a[y]

    注意有可能最后都没有删除,所以最后要统计一遍。

    太垃圾了还PE

    # include <set>
    # include <stdio.h>
    # include <string.h>
    # include <iostream>
    # include <algorithm>
    // # include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    const int M = 5e5 + 10;
    const int mod = 1e9+7;
    
    # define RG register
    # define ST static
    
    int n, q, a[M], ans[M]; 
    set<int> s[M];
    
    int main() {
        int x, y;
        char opt[23];
        cin >> n >> q;
        for (int i=1; i<=n; ++i) s[i].clear();
        while(q--) {
            scanf("%s", opt);
            if(opt[0] == '!') {
                scanf("%d", &x);
                a[x] ++;
            }
            if(opt[0] == '+') {
                scanf("%d%d", &x, &y);
                s[x].insert(y);
                s[y].insert(x);
                ans[x] -= a[y];
                ans[y] -= a[x];
            }
            if(opt[0] == '-') {
                scanf("%d%d", &x, &y);
                s[x].erase(y);
                s[y].erase(x);
                ans[x] += a[y];
                ans[y] += a[x];
            }
        }
        
        for (int i=1; i<=n; ++i)
            for (set<int>::iterator it = s[i].begin(); it != s[i].end(); ++it) 
                ans[i] += a[*it];
        
        for (int i=1; i<n; ++i) printf("%d ", ans[i]);
        printf("%d
    ", ans[n]);        
    
        return 0;
    }
    View Code
  • 相关阅读:
    安装篇-安装Nacos
    安装篇-安装RabbitMQ
    C类型字符串和字符数组的区别
    数据结构之链表操作
    Android WebView学习
    MySQL初级学习
    Android LinearLayout深入学习
    排序算法总结
    Apache Mina-1
    Nginx+Keepalived 集群方案
  • 原文地址:https://www.cnblogs.com/galaxies/p/bzoj4419.html
Copyright © 2011-2022 走看看