图的分块

例1. hdu 4858 项目管理

按点的度数划分为重点(deg>=sqrt(m))和轻点(deg<sqrt(m)), 轻点暴力更新, 重点只更新邻接的重点

#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <vector>
#define pb push_back
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll;

const int N = 1e5+10, INF = 0x3f3f3f3f;
int n, m, q, sqn;
int deg[N], u[N], v[N];
ll sum[N], val[N];
vector<int> g[N];

void work() {
	scanf("%d%d", &n, &m), sqn = sqrt(m);
	REP(i,1,n) g[i].clear(), deg[i]=sum[i]=val[i]=0;
	REP(i,1,m) {
		scanf("%d%d", u+i, v+i);
		++deg[u[i]], ++deg[v[i]];
	}
	REP(i,1,m) {
		if (deg[u[i]]>=sqn&&deg[v[i]]>=sqn) {
			g[u[i]].pb(v[i]),g[v[i]].pb(u[i]);
		}
		if (deg[u[i]]<sqn) g[u[i]].pb(v[i]);
		if (deg[v[i]]<sqn) g[v[i]].pb(u[i]);
	}
	scanf("%d", &q);
	REP(i,1,q) {
		int op, x, v;
		scanf("%d%d", &op, &x);
		if (op==0) {
			scanf("%d", &v);
			val[x] += v;
			for (int y:g[x]) if (deg[y]>=sqn) sum[y]+=v;
		} else {
			ll ans = 0;
			if (deg[x]<sqn) for (int y:g[x]) ans += val[y];
			else ans = sum[x];
			printf("%lld\n", ans);
		}
	}
}

int main() {
	int t;
	scanf("%d", &t);
	REP(i,1,t) work();
}

例2: hdu 4467 Graph

原文地址:https://www.cnblogs.com/uid001/p/10434786.html

时间: 2024-12-17 09:48:40

图的分块的相关文章

hdu 4858 项目管理 图的分块

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值.现在我们要编写一个项目管理软件,这个软件呢有两个操作:1.给某个项目的能量值加上一个特定值.2.询问跟一个项目相邻的项目的能量值之和.(如果有多条边就算多次,比如a和b有2条边,那么询问a的时候b的权值算2次). Input 第一行

skyline应用-BS绘制饼状图

这个有现成的代码,把代码做一个简要的说明,具体实现效果,是在TE的地图画一个饼状图. <script type="text/javascript"> function createpie() { //设置简单参数,包括半径等参数 var sum = 0; var radius = 100; var angle = 0; var i; //根据饼状图的分块,设置不同的颜色 var color = [0x0000a0, 0x00ff60, 0x8000a0, 0xa0ff00,

基于大规模RDF图的关键字查询

1. 基础知识 RDF图:RDF图是由三元组(subject, predicate, object)组成的有向图,subject通过predicate指向object,如图1-1所示为一个RDF图.通常用三元组的数量表示RDF图的大小. 图1-1 RDF图 RDF压缩图:基于RDF图的关键字查询先将图进行压缩为图G=(V, E).其中节点V包括RDF图中的实体.姓名(标签).类型信息,边E为RDF中实体之间的关系.图1-1所示RDF压缩图如图1-2所示. 图1-2 压缩图 下文中出现的图均为压缩

Html+CSS 学习第二天

趁着这两天,将html和CSS基本上学了一遍,大家如果想学习的话,可以百度w3cSchool,进行学习. 基础我就不说了,直接将我做的一个登陆页面放上去.刚学完CSS,写个漂亮的登录界面恶心死我了,感觉真是没啥艺术气息. 我先展示html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona

Chromium网页渲染机制简要介绍和学习计划

作为一个浏览器,快速地将网页渲染出来是最重要的工作.Chromium为了做到这一点,费尽了心机,做了大量优化工作.这些优化工作是卓有成效的,代表了当今最先进的网页渲染技术.值得一提的是,这些渲染技术不仅适用于网页渲染,也可以应用在原生系统的UI渲染上.例如,在Android系统上,我们就可以看到两者在渲染技术上的相似之处.本文接下来就对Chromium的网页渲染机制进行简要介绍,并且制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Chrom

经典Mathematica函数大全

转自:http://blog.renren.com/share/238323208/8426343822  Mathmatic 函数表  一.运算符及特殊符号 Line1; 执行Line,不显示结果 Line1,line2 顺次执行Line1,2,并显示结果 ?name 关于系统变量name的信息 ??name 关于系统变量name的全部信息 !command 执行Dos命令 n! N的阶乘 !!filename 显示文件内容 < Expr>> filename 打开文件写 Expr&g

BestCoder Round #1 1001 &amp;&amp; 1002 hdu 4857 4858

hdu 4857 逃生 第一题是拓扑排序,不是按照字典序最小输出,而是要使较小的数排在最前面..赛后弄了好久,才比较明白,我一直以为 反向建图,i从1到n,开始深搜dfs( i ),对i点的边,由小到大继续搜一下,同时标记搜过的数,搜过之后就不再搜,搜到底之后ans[cnt++] = u;这样顺序输出就是答案,后来经过超哥指点,才明白深搜贪心是错的.只有 反向建图,用优先队列把较大的数尽量排在前面,然后反序输出才是正解.. 1 #include<iostream> 2 #include<

专题训练之莫队算法

推荐博客/专栏:https://blog.csdn.net/xianhaoming/article/details/52201761莫队算法讲解(含树上莫队) https://blog.csdn.net/hzj1054689699/article/details/51866615莫队算法 https://zhuanlan.zhihu.com/p/25017840莫队算法 例题及讲解:(BZOJ2038)https://www.luogu.org/problemnew/show/P1494 讲解:

利用filter实时切换big5和gb2312,以及gb2312的简繁体

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求