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
  • 相关阅读:
    并发编程-协程
    并发编程--线程
    并发编程--进程
    并发编程--操作系统介绍
    套接字Socket
    网络基础
    异常处理
    面向对象-常用模块
    面向对象进阶(反射)
    C#项目优化
  • 原文地址:https://www.cnblogs.com/galaxies/p/bzoj4419.html
Copyright © 2011-2022 走看看