HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )
题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858
题意:
- 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!
- 两个节点间可能有多条边,不过一条边的两端必然是不同的节点。
- 每个节点都有一个能量值。
- 现在我们要编写一个项目管理软件,这个软件呢有两个操作:
- 1.给某个项目的能量值加上一个特定值。
- 2.询问跟一个项目相邻的项目的能量值之和。(如果有多条边就算多次,比如a和b有2条边,那么询问a的时候b的权值算2次)。
- 思路: 分成 重点 和 轻点 重点就是度数大于一个你自己设定的值的点( 我设为 sqrt(m)) ,其他点为起点,度数就是和你存在边的点,因为题目允许两个点有两条边,所以一个点对和它相连的点 的度数 的贡献 可能大于1
然后自己建图的时候,重点只和重点连边,轻点和所有点连 ( 因为和重点相连的点就是比较多的,你每次对重点 的能量值的修改都去枚举和它相连的点的话咧,就时间复杂度很高嘛,所以就索性不全部枚举了,只枚举和它相连的点的集合中同样是重点的点 ,记录贡献 ,然后那些没被枚举到的点都是轻点 )
(这样子就是 修改某个点的能量值 受影响的重点都会被枚举到,且修改权值,但是 对于轻点来说 是不一定被枚举到的,所以询问轻点就不能直接输出 sum [ x] ,只有重点可以)
然后咧,对于重点的询问,直接输出 sum [ x ], 对于轻点的询问就暴力 枚举 和它相连的点的集合 的 能量值 加起来就是答案了- 其实就是分摊复杂度嘛,重点暴力枚举的话就复杂度很高,所以就采用分块的思想。
- #include<bits/stdc++.h>
- #define LL long long
- #define ULL unsigned long long
- #define rep(i,j,k) for(int i=j;i<=k;i++)
- #define dep(i,j,k) for(int i=k;i>=j;i--)
- #define INF 0x3f3f3f3f
- #define mem(i,j) memset(i,j,sizeof(i))
- #define make(i,j) make_pair(i,j)
- #define pb push_back
- using namespace std;
- const int N=1e5+;
- vector<LL>G[N];
- struct note {
- LL st,en;
- }a[N];
- LL du[N];
- LL ans[N],sum[N];
- bool vis[N];
- int main() {
- LL t; LL n,m;
- scanf("%lld",&t);
- while(t--) {
- scanf("%lld %lld",&n,&m);
- rep(i,,n) { du[i]=ans[i]=sum[i]=;G[i].clear();vis[i]=false; }
- LL block=sqrt(m);
- rep(i,,m) {
- scanf("%lld %lld",&a[i].st,&a[i].en);
- if(++du[a[i].st]>block ) vis[a[i].st]=true;
- if(++du[a[i].en]>block) vis[a[i].en]=true;
- }
- rep(i,,m) {
- LL x=a[i].st,y=a[i].en;
- if(vis[x]) {
- if(vis[y]) {
- G[x].pb(y);
- G[y].pb(x);
- }
- else G[y].pb(x);
- }
- else {
- if(vis[y]) G[x].pb(y);
- else {
- G[x].pb(y);
- G[y].pb(x);
- }
- }
- }
- LL q;
- scanf("%lld",&q); LL op;
- LL x; LL y;
- while(q--) {
- scanf("%lld",&op);
- if(op==) {
- scanf("%lld %lld",&x,&y);
- sum[x]+=y;
- rep(i,,(LL)G[x].size()-) {
- //puts("1");
- LL v=G[x][i]; ans[v]+=y;
- }
- //puts("1");
- }
- else {
- scanf("%lld",&x);
- if(vis[x]) printf("%lld\n",ans[x]);
- else {
- LL tmp=;
- rep(i,,(LL)G[x].size()-) {
- int v=G[x][i]; tmp+=sum[v];
- }
- printf("%lld\n",tmp);
- }
- }
- }
- }
- return ;
- }
HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )的更多相关文章
- 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块
原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...
- 【bzoj3809/bzoj3236】Gty的二逼妹子序列/[Ahoi2013]作业 莫队算法+分块
原文地址:http://www.cnblogs.com/GXZlegend/p/6805252.html bzoj3809 题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了 ...
- 【BZOJ 3735】苹果树 树上莫队(树分块+离线莫队+鬼畜的压行)
2016-05-09 UPD:学习了新的DFS序列分块,然后发现这个东西是战术核导弹?反正比下面的树分块不知道要快到哪里去了 #include<cmath> #include<cst ...
- 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...
- Hdu 5213-Lucky 莫队,容斥原理,分块
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5213 Lucky Time Limit: 6000/3000 MS (Java/Others) Me ...
- [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】
题目链接: BZOJ - 3236 BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...
- XOR and Favorite Number(莫队算法+分块)
E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- 【BZOJ3585/3339】mex 莫队算法+分块
[BZOJ3585]mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. ...
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
[BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...
随机推荐
- 创建Vofuria工程,获取产品密钥
进入Vofuria官网 https://developer.vuforia.com/vui/develop/licenses/free/new 然后点击 然后在License Name中填写izji刚 ...
- Is It A Tree? POJ - 1308(并查集判树)
Problem Description A tree is a well-known data structure that is either empty (null, void, nothing) ...
- php实现只需要一个QQ号就可以获得用户信息
<?php // 通过QQ号即可获取用户信息 // 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100&t=154790 ...
- Disruptor 并发框架
什么是Disruptor Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JVM平 ...
- java lesson09总结
package Super; public class SuperTest { String color; // public SuperTest(String color) {this.colo ...
- MongoDB查询操作 返回指定字段(C#官方驱动)
首先,MongoDB中返回指定的字段的查询方法如下: db.person.find({Name:"小丑"},{Age:1,Sex:1}) 该语句表示:查询person表中name为 ...
- queryURLParams
let url = 'http://www.douqu.com/index.html?name1=val1&name2=val2'; //1.提取问号后的字符 let asktext = ur ...
- 充值css样式
@charset "utf-8"; /*reset CSS*/ body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,le ...
- html5中本地存储概念是什么?
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页 ...
- Centos7.7安装swoole
系统版本:centos 7.7(查看系统版本:cat /etc/redhat-release) 执行命令安装swoole: yum update -y && yum remove ph ...