HDU - 4858 项目管理
N个点,M条无向边。现在有Q组操作,一种是给 i号点增加能量,一种是询问 i号点相邻点的能量和(点间有多条边就算两次)。
据说暴力能过,但还是用这题学习了一下 点分块 。 度数不超过 sqrt(M) 的为 "轻点", 否则为 "重点","轻点"可以指向(连向)这两种点,但"重点"只能指向(连向)"重点" 。val[i]表示i号点能量,sum[i]维护i号点所有相邻的能量。"增加能量"时更新i号点相邻点j的sum[j],查询时"轻点"暴力搜,"重点"直接O(1)返回 sum[i]即可。
修改时,"轻点"们可以修改"重点","重点"可以修改"重点","重点"的sum[]是被维护的,而"轻点"只有sqrt(M)条边,爆搜没问题。
ps : 似乎"重点"出度不超过 2*sqrt(M),未证明。
#include <bits/stdc++.h>
using namespace std;
#define fst first
#define scd second
#define pb(x) push_back((x))
#define mkp(x,y) make_pair((x),(y))
#define ist(x) insert((x))
typedef long long ll;
typedef pair<int ,int > pii;
typedef pair<ll ,ll > pll;
typedef vector< int > vi;
ll gcd(ll a,ll b){ return b==?a:gcd(b,a%b);}
ll qPow(ll a,ll b,ll mod){ ll ret=1ll;while(b){ if(b&) ret=ret*a%mod;a=a*a%mod;b>>=;} return ret; } const int maxn=;
int degree[maxn];
vi G[maxn];
ll val[maxn];
ll sum[maxn];
pii bian[maxn];
int bound; void addedge(int u,int v){
if(degree[u]<=bound) G[u].pb(v);
else if(degree[v]>bound) G[u].pb(v);
} int main(){
int T;
scanf("%d",&T);
while(T--) {
int N,M;
scanf("%d%d",&N,&M);
for(int i=;i<=N;++i){
degree[i]=;
G[i].clear();
val[i]=0ll;
sum[i]=0ll;
}
for(int i=;i<=M;++i){
int u,v;
scanf("%d%d",&u,&v);
pii tmp=mkp(u,v);
degree[u]++,degree[v]++;
bian[i]=tmp;
}
bound=sqrt(M);
for(int i=;i<=M;++i)
{
int u=bian[i].fst,v=bian[i].scd;
addedge(u,v);
addedge(v,u);
}
int Q;
scanf("%d",&Q);
for(int i=;i<Q;++i){
int op;
scanf("%d",&op);
if(op){
int u;scanf("%d",&u);
if(degree[u]>bound) printf("%I64d\n",sum[u]);
else{
ll ans=0ll;
for(auto to: G[u]) {
ans+=val[to];
}
printf("%I64d\n",ans);
}
}
else{
int u,w;scanf("%d%d",&u,&w);
val[u]+=1ll*w;
for(auto to: G[u]){
sum[to]+=1ll*w;
}
}
}
}
return ;
}
分摊复杂度,点分块。
HDU - 4858 项目管理的更多相关文章
- HDU 4858 项目管理(邻接表 暴力模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可 ...
- hdu 4858 项目管理 图的分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能 ...
- HDU 4858 项目管理 分块
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4858 题解: 下面说一个插入查询时间复杂度为sqrt(m)的算法: 对每个点定义两个值:val,su ...
- hdu 4858 项目管理(STL集装箱)
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 4858 项目管理(vector模拟)
# include <stdio.h> # include <algorithm> # include <string.h> # include <vecto ...
- (hdu)4858 项目管理 (vector)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 Problem Description 我们建造了一个大项目!这个项目有n个节点,用很多边连接起 ...
- HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )
题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 题意: 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! ...
- HDU 4858 分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 题意:中文题面 思路:来自此博客 对每个点定义两个值:val,sum,val记录自己的特征值,s ...
- hdu 4858 水题
题意:我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值.现在我们要编写一个项目管理软件 ...
随机推荐
- webview之学习文章(待续)
webview与js交互: Tencent/VasSonic(缓存优化方案) lzyzsd/JsBridge: pengwei1024/JsBridge: -----webview的框架 TheFin ...
- 案例学编程系列:案例认识 Spring IOC
本文spring libs 地址:https://github.com/yizhiamumu/springlibs Spring 能帮我们做什么 ①.Spring 能帮我们根据配置文件创建及组装对象之 ...
- 面试题_默认传参list
# ###2.值是多少 def extendList(val, list=[]): list.append(val) return list 如果默认形参是列表,会提前在内存中开辟一个空间存储列表 如 ...
- Pyrit help
Pyrit 0.5.1 (C) 2008-2011 Lukas Lueg - 2015 John Morahttps://github.com/JPaulMora/PyritThis code is ...
- FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed
FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: re ...
- C语言的“编译、链接”
我们写的代码,仅仅是文本文件(txt),不管后缀怎么变,终究是文本文件,计算机只能显示,不能做事(执行). 文本文件通过“编译.链接”,成为可执行文件(windows下是exe): 编译:生成.o文件 ...
- python 平衡二叉树实现
平衡二叉树: 在上一节二叉树的基础上我们实现,如何将生成平衡的二叉树 所谓平衡二叉树: 我自己定义就是:任何一个节点的左高度和右高度的差的绝对值都小于2 如图所示,此时a的左高度等于3,有高度等于1, ...
- NumPy基础
一.NumPy ndarray (一)生成ndarray 表 数组生成函数 函数 描述(默认数据类型是float64) array 将输入数据(序列型对象)转换为ndarray,若不显示的指定数据类型 ...
- python_装饰器
越来越觉得写一点技术博客是有多么重要了,明日复明日,现在就开始写吧! 1. 普通装饰器 装饰器的写法是一种语法糖,装饰器也还是一个函数而已,它接收一个函数对象作为参数,并返回一个新函数,主要是拓展原函 ...
- 正则表达式中引用shell变量
注意,是用单引号包含双引号来引用变量 > MAPPING_ID_PO="000001:AP1-TU1000002:AP1-TU2000003:AP1-TU3000004:AP1-TU4 ...