当前位置: 首页 > 编程日记 > 正文

HDU 4467 分块

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

题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权。然后q个询问。询问分为两种: Change u:把点u的颜色反转(黑变白,白变黑),Asksum a b(a,b的值为0/1):统计所以边的权值和,边的两个点满足一个点的颜色为a,一个点的颜色为b。

思路:考虑暴力的做法。修改可以做法O(1),但是查询就得O(m).所以总复杂度为O(m*q)会TLE。然后考虑图分块。参考HDU 4858的做法,将点分为重点和轻点。重点(度数>=sqrt(m)),轻点(度数sqrt(m))。 由于此题查询比较大,所以需要预处理一下优化之后的运算。我们定义每个顶点维护3个属性:顶点的颜色color,与该点相连的边并且另外一个点是白点的边权和W, 同理B是黑色点的边权和。 然后维护3个变量ansWW:边上两个点都是白色的边权和。同理ansWB,ansBB。

修改:

轻点更新自己的color,W,B。同时更新所有的邻点的W,B值

重点更新自己的color,W,B。同时只更新相邻重点的W,B值(所以重点不需要连边到轻点)

对于更新。若未更新时该点的颜色为白色,那么更新后该点的颜色为黑色。那么对于相邻的点的W就要减去对应边的权值,相邻点的B就要加上对应边的权值。

对于更新。若未更新时该点的颜色为白色,那么更新后该点的颜色为黑色。那么边为WW的答案就要减去与该点相连的W的总和,边WB的答案就要减去与该点相邻的B的总和。  并且边为BB的答案就要加上与该点相邻的B的总和,边为WB的答案就要加上与该点相邻的W的总和。

查询:

直接输出对应的值

性质:

与重点相邻的重点不超过sqrt(m)个。

与轻点相邻的所有点不超过sqrt(m)个。

注意:

该题会有重边,如果不合并重边的话会TLE。所以用个map来合并下重边的值即可。

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>  
#include<string.h>  
#include<cstring>
#include<algorithm>  
#include<queue>  
#include<math.h>  
#include<time.h>
#include<vector>
#include<iostream>
#include<map>
using namespace std;
typedef long long int LL;
const int MAXN = 100000 + 10;
struct Edges{int u, v; LL w;Edges(int u = 0, int v = 0,LL w=0) :u(u), v(v),w(w){};
};vector<Edges>G[MAXN];
map<pair<int, int>, LL>edge;
struct Node{int val;LL W, B;Node(int val = 0, LL W = 0, LL B = 0) :val(val), W(W), B(B){};
}node[MAXN];
LL ansWB, ansWW, ansBB;
int du[MAXN], block;
void init(int n,int m){edge.clear(); ansWB = ansWW = ansBB = 0;block = (int)sqrt(m + 0.5);for (int i = 1; i <= n; i++){G[i].clear(); du[i] = 0; node[i].W = node[i].B = 0;}
}
void makeGraph(int n, int m){for (map<pair<int,int>,LL>::iterator it=edge.begin(); it!=edge.end(); it++){int u = it->first.first, v = it->first.second; LL w = it->second;if (du[u] >= block&&du[v] >= block){G[u].push_back(Edges(u, v, w)); G[v].push_back(Edges(v, u, w));}if (du[u] < block){G[u].push_back(Edges(u, v, w));}if (du[v] < block){G[v].push_back(Edges(v, u, w));}if (node[u].val&&node[v].val){ansWW += w; node[u].W += w; node[v].W += w;}else if (!node[u].val&&!node[v].val){ansBB += w; node[u].B += w; node[v].B += w;}else{ansWB += w; if (node[u].val){node[u].B += w; node[v].W += w;}else{node[u].W += w; node[v].B += w;}}}
}
void modify(int pos){if (node[pos].val){ansWW -= node[pos].W; ansWB -= node[pos].B;ansBB += node[pos].B; ansWB += node[pos].W;for (int i = 0; i < G[pos].size(); i++){node[G[pos][i].v].W -= G[pos][i].w;node[G[pos][i].v].B += G[pos][i].w;}}else{ansBB -= node[pos].B; ansWB -= node[pos].W;ansWW += node[pos].W; ansWB += node[pos].B;for (int i = 0; i < G[pos].size(); i++){node[G[pos][i].v].W += G[pos][i].w;node[G[pos][i].v].B -= G[pos][i].w;}}node[pos].val = !node[pos].val;
}
LL query(int u, int v){if (u&&v){ return ansWW; }if (!u&&!v){ return ansBB; }return ansWB;
}
int main(){//#ifdef kirito//    freopen("in.txt", "r", stdin);//    freopen("out.txt", "w", stdout);//#endifint n, m, q,Case=1;while (~scanf("%d%d", &n, &m)){init(n, m);for (int i = 1; i <= n; i++)scanf("%d", &node[i].val);for (int i = 1; i <= m; i++){int u, v; LL w; scanf("%d%d%I64d", &u, &v, &w);if (u > v){ swap(u, v); }if (edge.find(make_pair(u, v)) == edge.end()){du[u]++; du[v]++;edge.insert(make_pair(make_pair(u, v), w));}else{edge[make_pair(u, v)] += w;}}makeGraph(n, m);printf("Case %d:\n", Case++);scanf("%d", &q);while (q--){int u,v;  char type[20];scanf("%s", type);if (type[0]=='A'){scanf("%d%d", &u, &v);printf("%I64d\n", query(u, v));}else{scanf("%d", &u); modify(u);}//Debug:printf("BB=%I64d WB=%I64d WW=%I64d\n", ansBB, ansWB, ansWW);
        }}return 0;
}

转载于:https://www.cnblogs.com/kirito520/p/5952863.html

相关文章:

ASP.NET重用代码技术 - 代码绑定技术

作者&#xff1a; 苏红超 导读 代码绑定是ASP.NET提供的一个重要的新技术。本文将会为您展示如何利用代码绑定技术来实现Web页面表示层和商业逻辑代码的分离&#xff0c;并建议您使用代码绑定技术实现代码的可重用。在接下来的另外一篇文章当中&#xff0c;我们会给出另外…

【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

查看PDF版本 转载请注明&#xff1a;ni掌柜 nileadergmail.com ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务框架&#xff0c;包含一组简单的原语集合。通过这些原语言的组合使用&#xff0c;能够帮助我们解决更高层次的分布式问题&#xff0c;关于Zo…

一站式了解多模态、金融、事理知识图谱构建指南 | AI ProCon 2020

整理 | 许爱艳出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】7 月 3-4 日&#xff0c;由 CSDN 主办的第三届 AI 开发者大会&#xff08;AI ProCon 2020&#xff09;在线上举行。本次大会有超万人报名参与&#xff0c;参与人群覆盖 60 领域、5000…

CentOS7安装配置redis-3.0.0

一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar zxvf redis-3.0.0.tar.gz cd redis-3.0.0 #如果不加参数,linux下会报错 make MALLOClibc 安装好之后,启动文件 #启动redis src/redis-server &#关闭re…

ASP.NET重用代码技术 - 用户控件技术

作者&#xff1a; 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行。我们发现&#xff0c;利用代码绑定技术我们可以容易的将我们的代码和内容分离开来&#xff0c;利用它可以建立可重用的代码&#xff0c;只是这种技术本身也存在着一些局限性。在本文中&…

liunx 下dhcp中继及服务器配置

dhcp:动态主机配置协议 使用udp协议 端口为67&#xff08;服务&#xff09;&#xff0c;68&#xff08;客户&#xff09; 作用&#xff1a;动态分配地址等参数 工作模式 1. 手工 manual server—地址池 &#xff08;ip—mac&#xff09; 2222----1.1.1.1 dhcpclient ------地址…

PyCharm vs VSCode,是时候改变你的 IDE 了!

作者 | Sohaib Ahmad译者 | 鹿未来&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;也许是我有些落伍&#xff0c;或者也是因为JetBrains在Python IDE的市场上占有很大的份额&#xff0c;以至于直到最近我才发现&a…

(转)Linux 下 查看以及修改文件权限

场景&#xff1a;Linux环境下远程部署项目&#xff0c;发现因为文件权限问题&#xff0c;不能执行远端的可执行文件。问题还没解决&#xff0c;待议。。。 1 查看权限 在终端输入: ls -l xxx.xxx &#xff08;xxx.xxx是文件名&#xff09; 那么就会出现相类似的信息&#…

软件文档知多少?

作者&#xff1a;由于本人在无数网站看到此文 无法确定第一作者 请作者与本人联系如今&#xff0c;软件开发越来越复杂&#xff0c;软件功能也越来越丰富。而几乎所有成熟的商业软件&#xff0c;都是靠一个开发团队齐心协力的血汗结晶。“罗马不是一天建成的&#xff01;”&…

在 VMware ESXi 5.0 上安装万兆网卡驱动

2012年02月28日 | 标签: vmware esxi | 作者&#xff1a;vpsee 转载自&#xff1a;http://www.vpsee.com/2012/02/intall-network-card-driver-on-vmware-esxi-5-0/ 昨天刚发现新购的 Dell PowerEdge R710 服务器上配的 Intel Ethernet Server Adapter X520-T2 万兆网卡居然在…

漫谈 ClickHouse 在实时分析系统中的定位与作用

ClickHouse 是一款由俄罗斯Yandex公司开源的OLAP数据库&#xff0c;拥有着卓越的性能表现&#xff0c;在官方公布的基准测试中&#xff0c;ClickHouse的平均响应速度是Vertica的2.63倍、InfiniDB的17倍、MonetDB的27倍、Hive的126倍、MySQL的429倍以及Greenplum的10倍。自2016年…

Js+Dhtml:WEB程序员简易开发工具包(预先体验版)

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<HTML> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <META nameGemeratpr content网络程序员伴侣(Lshdic)2005_开拓版> <TITLE>LD5工具</TITLE> <st…

残差网络的前世今生与原理 | 赠书

本文内容节选自《深度学习之模型设计&#xff1a;核心算法与案例实践》&#xff0c;作者言有三。本书详解了数十年来深层卷积神经网络模型的主流设计思想&#xff0c;理论讲解细致&#xff0c;实战案例丰富&#xff0c;是熟练掌握深度学习模型使用的必备参考资料。想要了解关于…

python---简单数据库

2019独角兽企业重金招聘Python工程师标准>>> #simple database#people people {Alice:{phone:2341,addr:Foo drive 23},Beth:{phone:9102,addr:Bar street 42},Ceil:{phone:3158,addr:Baz avenue 90} }#describe labels {phone:phone number,addr:address }name …

Linux系统之路——如何在CentOS7.2安装MySQL

一、Mysql 各个版本区别&#xff1a;1、MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。2、MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;可以试用30天。3、MySQL Cluster 集群版&#xff0c;开源免费。可将几个M…

Vml+Dhtml:制作一个应用渐变颜色效果不错的进度条

//原作:风云舞,载自: http://www.lshdic.com/bbs<HTML xmlns:v> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <Meta nameGemeratpr content网络程序员伴侣(Lshdic)2004> <TITLE>效果不错的VML进度条</TITLE> &l…

使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)

; 脚本由 Inno Setup 脚本向导 生成&#xff01;; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档&#xff01;#define MyAppName "小小鸟软件"#define MyAppVersion "2012.2.29"#define MyAppPublisher "小小鸟科技"#define MyAppURL &…

GPT-3到来,程序员会被AI取代吗?

作者 | Frederik Bussler译者 | 弯月&#xff0c;编辑 | 屠敏题图 | 自东方 IC出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;2017年的时候&#xff0c;曾有研究人员问&#xff1a;到2040年人工智能是否承担起大多数的编程工作&#xff1f;如今OpenAI的G…

iOS开发几年了,你清楚OC中的这些东西么!!!?

iOS开发几年了,你清楚OC中的这些东西么!!!? 前言几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS的开发了, 之后就是对swift持续不断的学习, 近来swift3.0的发布, 更多的…

在做会员资料修改时,实现下拉菜单的默认项定位

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/ <!--在写一个交友网站时碰到的问题,就是当会员修改资料时&#xff0c;如何定位SELECT的菜单列默认项&#xff0c;不过很容易就解决了--> <HTML> <HEAD> <META http-equivContent-Type contenttex…

NFS 文件共享的创建过程

nfs 文件共享的服务器 nfs服务需要两个软件包nfs-utils和portmap 启动nfs服务 # service portmap start # service nfs start # chkconfig nfs on 开机自动启动 配置文件&#xff1a; /etc/exports 想要共享某个文件则编辑配置文件 共享目录 共享IP&#xff08;共享属性&…

行业新风向!AI人才缺口30万,单个项目最高补贴1000万元!

最近&#xff0c;程序员届有一个重大好消息&#xff0c;可能很多人还不知道&#xff0c;那就是&#xff1a;国内某些城市已经开始程序员人才补贴了&#xff01;对于人工智能公司的项目开发、人才引进、科技研发&#xff0c;最高按照国拨经费的30%给予配套支持&#xff0c;单个项…

Robotium todolist.test.elements

2019独角兽企业重金招聘Python工程师标准>>> ElementsEditToDoItemActivity package com.example.todolist.test.elements;import android.widget.Button; import android.widget.EditText;import com.example.todolist.R; import com.robotium.solo.Solo;public cl…

经典的导航二级式导航菜单增强版

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<!--呵呵我发的上一版相信大家都看过了吧&#xff0c;想一想上一版的确是不怎么华丽&#xff0c;而且上一版是针对表格内的连接A而定位的而这一版的优点显然比上一版要华丽&#xff0c;速度一样快&#xff0c;而且是针…

【海洋女神原创】installshield 32位打包和64位打包的注意事项

32/64位问题要把握几点&#xff1a;1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解InstallShield Build出来的安装包本身是32位应用程序4. 了解Windows 64位系统上的32位路径和64位路径差异以及如何在InstallShield的系统变量中找到对应的…

如何提高模型性能?这四大方法值得尝试 | CSDN 博文精选

作者 | BoCong-Deng编辑 | 屠敏封图 | 自东方 IC出品 | CSDN 博客写在前面在我们进行模型训练时&#xff0c;如果你只是想要让模型具有不错的性能&#xff0c;那么盲目地尝试网络架构足以达到目的。而在本文中&#xff0c; 我们将为你提供一套用于构建最先进深度学习模型的必备…

ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程

1、副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录&#xff0c;所以需要对一年前2015年5月1日的数据进行恢复。而2016年初因为进行迁移&#xff0c;所以有些文件可能丢失&#xff0c;手上只有rman全备文件&#xff0c;希望在一天之内找回&a…

C语言文件等题

1.#include <stdio.h>double fun(int n){ }main(){ int n; double s; printf("\nInput n: "); scanf("%d",&n); sfun(n); printf("\n\ns%f\n\n",s); NONO();}NONO(){/* 请在此函数内打开文件&#xff0c;输入测试数据&…

使用 Vml 制作立体柱状投票统计图的完整程序

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<!--以下便是完整的 JsVml 制作柱状投票统计图的完整程序,保存为HTM文件运行即可看到效果其中 array数组中的分组可以为6个也可以为2&#xff0c;3&#xff0c;4&#xff0c;5个等,运行以下程序需要您的浏览器支持VML…

Python, C++和Java代码互翻,Facebook开发首个自监督神经编译器

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;将早期的编程语言&#xff08;例如COBOL&#xff09;的代码库迁移到现在的编程语言&#xff08;例如Java或C&#xff09;是一项艰巨的任务&#xff0c;它需要源语言和目标语言方面的专业知识。COBOL如今仍在…