zoukankan      html  css  js  c++  java
  • BestCoder Round #1 第二题 项目管理

    // 第二题 我记得很久很久很久以前看过这样的题目,忘记是哪的区域赛了

    // 记得有人说和节点度数有关,我记不清了,反正当时完全不懂

    // 然后我想了想,估计就是更新节点度数有关,YY出来可能只要更新相邻节点度数更大或更小的就可以了

    // 复杂度不知道多少,就是提交了试试,15MS就过了

    // 看来就是这样了

    // 具体就是求出每个节点度数,然后每次更新时,只要更新与自己相连,但度数比自己大的

    // 查询时把度数自己大的节点累加的值加上就可输出,具体看代码比较清楚

    // 也就做得来这2题了(见识少,以前题目做得少)。

    // 不过在厦门实训感觉蛮悠闲,企业上课就是比学校效率

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <queue>
    using namespace std;
    #define LL long long
    #define N 100010
    #define mod 1000000007
    vector<int> V[N],up[N];//V记录边,up记录邻接节点,但度数自己大
    int in[N];//记录节点度数
    int sum[N],add[N];//add 保存更新
    int main()
    {
      //  priority_queue<int,vector<int>,greater<int> >
        int T;
        int n,m,Q;
        int a,b;
        int i,j;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d %d",&n,&m);
            for(i=1;i<=n;i++){
                V[i].clear();
                in[i]=0;
                up[i].clear();
                sum[i]=add[i]=0;
            }
            while(m--)
            {
               scanf("%d %d",&a,&b);
               V[a].push_back(b);
               V[b].push_back(a);
               in[b]++;
               in[a]++;
            }
    
            for(a=1;a<=n;a++)
                for(j=0;j<V[a].size();j++)
             {
                 b=V[a][j];
                if(in[b]>=in[a])
                    up[a].push_back(b);
             }
           scanf("%d",&Q);
           int cmd,u,v;
           while(Q--)
           {
               scanf("%d %d",&cmd,&u);
                if(cmd==0)
                {
                    scanf("%d",&v);
                    add[u]+=v;
                    for(i=0; i<up[u].size(); i++)
                    {
                        j=up[u][i];
                        sum[j]+=v;
                    }
                }
                else
                {
                    int ans=sum[u];
                   for(i=0; i<up[u].size(); i++)
                    {
                        j=up[u][i];
                        if(in[j]!=in[u])
                         ans+=add[j];
                    }
                    printf("%d
    ",ans);
                }
           }
    
        }
        return 0;
    }
  • 相关阅读:
    收集起来先
    asp .net 页面回车触发button 按钮事件
    关于SQL 数据库表中的聚集索引和非聚集索引等
    WinForm换肤操作(用IrisSkin2.dll)
    生成Word文档的相关操作
    API自动化测试测试数据集
    API文档实践
    使用eolinker对API测试的响应结果进行断言
    API自动化定时测试
    接口测试之对数据进行RSA加解密
  • 原文地址:https://www.cnblogs.com/372465774y/p/3857236.html
Copyright © 2011-2022 走看看