题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858

题意:

  1. 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!
  2. 两个节点间可能有多条边,不过一条边的两端必然是不同的节点。
  3. 每个节点都有一个能量值。
  4.  
  5. 现在我们要编写一个项目管理软件,这个软件呢有两个操作:
  6. 1.给某个项目的能量值加上一个特定值。
  7. 2.询问跟一个项目相邻的项目的能量值之和。(如果有多条边就算多次,比如ab2条边,那么询问a的时候b的权值算2次)。
  8.  
  9. 思路: 分成 重点 轻点 重点就是度数大于一个你自己设定的值的点( 我设为 sqrtm)) ,其他点为起点,度数就是和你存在边的点,因为题目允许两个点有两条边,所以一个点对和它相连的点 的度数 的贡献 可能大于1
    然后自己建图的时候,重点只和重点连边,轻点和所有点连 因为和重点相连的点就是比较多的,你每次对重点 的能量值的修改都去枚举和它相连的点的话咧,就时间复杂度很高嘛,所以就索性不全部枚举了,只枚举和它相连的点的集合中同样是重点的点 ,记录贡献 ,然后那些没被枚举到的点都是轻点
    (这样子就是 修改某个点的能量值 受影响的重点都会被枚举到,且修改权值,但是 对于轻点来说 是不一定被枚举到的,所以询问轻点就不能直接输出 sum [ x] ,只有重点可以)
    然后咧,对于重点的询问,直接输出 sum [ x ], 对于轻点的询问就暴力 枚举 和它相连的点的集合 能量值 加起来就是答案了
  10.  
  11. 其实就是分摊复杂度嘛,重点暴力枚举的话就复杂度很高,所以就采用分块的思想。
  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define ULL unsigned long long
  4. #define rep(i,j,k) for(int i=j;i<=k;i++)
  5. #define dep(i,j,k) for(int i=k;i>=j;i--)
  6. #define INF 0x3f3f3f3f
  7. #define mem(i,j) memset(i,j,sizeof(i))
  8. #define make(i,j) make_pair(i,j)
  9. #define pb push_back
  10. using namespace std;
  11. const int N=1e5+;
  12. vector<LL>G[N];
  13. struct note {
  14. LL st,en;
  15. }a[N];
  16. LL du[N];
  17. LL ans[N],sum[N];
  18. bool vis[N];
  19. int main() {
  20. LL t; LL n,m;
  21. scanf("%lld",&t);
  22. while(t--) {
  23. scanf("%lld %lld",&n,&m);
  24. rep(i,,n) { du[i]=ans[i]=sum[i]=;G[i].clear();vis[i]=false; }
  25. LL block=sqrt(m);
  26. rep(i,,m) {
  27. scanf("%lld %lld",&a[i].st,&a[i].en);
  28. if(++du[a[i].st]>block ) vis[a[i].st]=true;
  29. if(++du[a[i].en]>block) vis[a[i].en]=true;
  30. }
  31. rep(i,,m) {
  32. LL x=a[i].st,y=a[i].en;
  33. if(vis[x]) {
  34. if(vis[y]) {
  35. G[x].pb(y);
  36. G[y].pb(x);
  37. }
  38. else G[y].pb(x);
  39. }
  40. else {
  41. if(vis[y]) G[x].pb(y);
  42. else {
  43. G[x].pb(y);
  44. G[y].pb(x);
  45. }
  46. }
  47. }
  48. LL q;
  49. scanf("%lld",&q); LL op;
  50. LL x; LL y;
  51. while(q--) {
  52. scanf("%lld",&op);
  53. if(op==) {
  54. scanf("%lld %lld",&x,&y);
  55. sum[x]+=y;
  56. rep(i,,(LL)G[x].size()-) {
  57. //puts("1");
  58. LL v=G[x][i]; ans[v]+=y;
  59. }
  60. //puts("1");
  61. }
  62. else {
  63. scanf("%lld",&x);
  64. if(vis[x]) printf("%lld\n",ans[x]);
  65. else {
  66. LL tmp=;
  67. rep(i,,(LL)G[x].size()-) {
  68. int v=G[x][i]; tmp+=sum[v];
  69. }
  70. printf("%lld\n",tmp);
  71. }
  72. }
  73. }
  74. }
  75. return ;
  76. }

HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )的更多相关文章

  1. 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块

    原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...

  2. 【bzoj3809/bzoj3236】Gty的二逼妹子序列/[Ahoi2013]作业 莫队算法+分块

    原文地址:http://www.cnblogs.com/GXZlegend/p/6805252.html bzoj3809 题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了 ...

  3. 【BZOJ 3735】苹果树 树上莫队(树分块+离线莫队+鬼畜的压行)

    2016-05-09 UPD:学习了新的DFS序列分块,然后发现这个东西是战术核导弹?反正比下面的树分块不知道要快到哪里去了 #include<cmath> #include<cst ...

  4. 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...

  5. Hdu 5213-Lucky 莫队,容斥原理,分块

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5213 Lucky Time Limit: 6000/3000 MS (Java/Others)    Me ...

  6. [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】

    题目链接: BZOJ - 3236   BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...

  7. XOR and Favorite Number(莫队算法+分块)

    E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  8. 【BZOJ3585/3339】mex 莫队算法+分块

    [BZOJ3585]mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. ...

  9. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

随机推荐

  1. Netty源码剖析-启动服务

    参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! --1主线分两步: 一:首先在our thread里,如果写在mai ...

  2. k-近邻(KNN) 算法预测签到位置

    分类算法-k近邻算法(KNN): 定义: 如果一个样本在特征空间中的k个最相似 (即特征空间中最邻近) 的样本中的大多数属于某一个类别,则该样本也属于这个类别 来源: KNN算法最早是由Cover和H ...

  3. MySQL 索引的优化

    一.MySQL如何使用索引(index) 1.1 索引概述 索引用于快速查找具有特定列值的行. 如果不使用索引,MySQL必须从表的第一行开始,然后扫描整个表来寻找符合条件的行.这种情况下,表越大,扫 ...

  4. Spring实战(二)Spring容器和bean的生命周期

    引入问题: 在XML配置文件中配置bean后,这些文件又是如何被加载的?它们被加载到哪里去了? Spring容器——框架核心 1.什么是Spring容器?它的功能是什么? 在基于Spring的应用中, ...

  5. hdu 1869 枚举+Dijstra

    一点小变形就是了..] #include<iostream> #include<cstdio> #define maxn 201 #define inf 999999 usin ...

  6. pat L2_004

    一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树. 所谓二叉搜索 ...

  7. TCP协议探究(二):超时与重试

    1 概述 TCP提供可靠的运输层. 可靠性保证之一:确认从另一端收到的数据. 但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这种问题. 如果当定时器溢出时还没有收到确认,它就重传该 ...

  8. 微信小程序修改radio和checkbox的默认样式和图标

    wxml: <view class="body"> <view class="body-content"> 第1题:企业的价值观是 ? ...

  9. STM32-移植FATFS的NANDFLASH驱动

    一,建立工程FATFS源码 1,在http://elm-chan.org/fsw/ff/00index_e.html上下载ff007c.zip,并把ff007c.zip里面的 src文件夹复制到D:\ ...

  10. 客户端相关知识学习(十)之app给h5传递数据

    方法一: app可以把参数传到h5的链接里,用类似?xx=xx&xx=xx的形式拼接,js解析参数即可. 方法二: 情况一:app调用h5 原生app都可以对js的function进行触发,前 ...