luogu 3998 [SHOI2013]发微博 map

考试的时候被卡常了~

code: 

#include <bits/stdc++.h>    
#define ll long long 
#define N 200002 
#define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout)     
using namespace std;  
int n,m; 
int size[N];    
int answer[N];   
map<int,int>con[N];         
map<int,int>::iterator it;      
int main() 
{ 
    int i,j;   
    // setIO("qq");       
    scanf("%d%d",&n,&m);  
    for(i=1;i<=m;++i) 
    {    
        char op[2]; 
        scanf("%s",op);  
        if(op[0]=='!') 
        {   
            int x;  
            scanf("%d",&x);  
            ++size[x];   
        }
        if(op[0]=='+') 
        { 
            int x,y; 
            scanf("%d%d",&x,&y);   
            if(!con[x][y]) 
            {
                con[x][y]=con[y][x]=1;   
                answer[y]-=size[x];            
                answer[x]-=size[y];   
            }   
        }
        if(op[0]=='-') 
        {  
            int x,y; 
            scanf("%d%d",&x,&y);  
            if(con[x][y]) 
            {
                con[x][y]=con[y][x]=0;  
                answer[x]+=size[y]; 
                answer[y]+=size[x];                      
            }
        }
    }
    for(i=1;i<=n;++i) 
    {
        for(it=con[i].begin();it!=con[i].end();it++) 
        { 
            if(it->second==0) continue;   
            int u=it->first;       
            answer[u]+=size[i];         
        }
    }
    for(i=1;i<=n;++i) printf("%d ",answer[i]);  
    return 0; 
}

  

posted @ 2019-10-10 14:18  EM-LGH  阅读(132)  评论(0编辑  收藏  举报