hdu4467 graph
莫队+重点轻点
题意:给你n个点(每个点都有一个颜色,0代表黑色,1代表白色),m条边,每条边有一个权值.现在有有两个操作,一个是修改某个点的颜色(白变成黑/黑变成白),另外一个是询问那些边的两个端点都为指定颜色的权值总和
分析:将所有点分为重点和轻点,但是这次重点和重点之前的边要建在一个图中,剩余的边要建在另一个图中。对于最后访问的颜色,只有三种情况黑+黑(求和为0),黑+白(求和为1),白+白(求和为2),所以用a[0],a[1],a[2]分别对应的答案。对于重点i设置一个sum[i][2],sum[i][0]表示所有与他相邻且颜色为0(黑)的点的边权之和,sum[i][1]同理。更新时,对于重点i来说拿sum[i][0]和sum[i][1]去直接更新a数组,同时将其相邻的重点的sum值进行修改。而对于轻点i来说,遍历所有与i相连的边,暴力更新a数组,而当其相邻点为重点时则需要更新一下重点的sum数组。对于查询操作,直接输出a数组中的值即可
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<cmath> 7 using namespace std; 8 const int M=1e5+10; 9 typedef long long ll; 10 struct node{ 11 ll u,v,w; 12 }a[M]; 13 bool cmp(node p,node q){ 14 if(p.u==q.u) 15 return p.v<q.v; 16 return p.u<q.u; 17 } 18 struct node1{ 19 ll id,w; 20 node1(ll id1=0,ll w1=0):id(id1),w(w1){ 21 } 22 }; 23 vector<node1>g1[M],g2[M]; 24 ll n,m,in[M],zhong[M],sum[M][3],ans[4],col[M]; 25 char s[10]; 26 int main(){ 27 ll sign=1; 28 while(scanf("%lld%lld",&n,&m)!=EOF){ 29 for(int i=1;i<=n;i++){ 30 g1[i].clear(); 31 g2[i].clear(); 32 zhong[i]=0; 33 in[i]=0; 34 sum[i][0]=sum[i][1]=0; 35 } 36 memset(ans,0,sizeof(ans)); 37 //ans[0]=ans[1]=ans[2]=0; 38 for(int i=1;i<=n;i++) 39 scanf("%lld",&col[i]); 40 for(int i=1;i<=m;i++){ 41 scanf("%lld%lld%lld",&a[i].u,&a[i].v,&a[i].w); 42 if(a[i].u>a[i].v) 43 swap(a[i].u,a[i].v); 44 ans[col[a[i].u]+col[a[i].v]]+=a[i].w; 45 } 46 sort(a+1,a+1+m,cmp); 47 ll cnt=0; 48 int i,j; 49 //将重边加在一起; 50 for(i=1;i<=m;i=j){ 51 for(j=i+1;j<=m;j++) 52 if(a[i].u==a[j].u&&a[i].v==a[j].v){ 53 a[i].w+=a[j].w; 54 } 55 else 56 break; 57 a[++cnt]=a[i]; 58 } 59 ll N=(int)sqrt(cnt); 60 for(i=1;i<=cnt;i++){ 61 in[a[i].u]++; 62 in[a[i].v]++; 63 } 64 for(i=1;i<=n;i++){ 65 if(in[i]>N) 66 zhong[i]=1; 67 } 68 for(i=1;i<=cnt;i++){ 69 ll u=a[i].u,v=a[i].v,w=a[i].w; 70 if(zhong[u]){ 71 if(zhong[v]){ 72 g1[u].push_back(node1(v,w)); 73 g1[v].push_back(node1(u,w)); 74 sum[u][col[v]]+=w; 75 sum[v][col[u]]+=w; 76 } 77 else{ 78 g2[v].push_back(node1(u,w)); 79 sum[u][col[v]]+=w; 80 } 81 } 82 else{ 83 if(zhong[v]){ 84 g2[u].push_back(node1(v,w)); 85 sum[v][col[u]]+=w; 86 } 87 else{ 88 g2[u].push_back(node1(v,w)); 89 g2[v].push_back(node1(u,w)); 90 } 91 } 92 } 93 ll P; 94 printf("Case %lld:\n",sign++); 95 scanf("%lld",&P); 96 97 98 while(P--){ 99 scanf("%s",s); 100 if(s[0]=='A'){ 101 int x,y; 102 scanf("%d%d",&x,&y); 103 printf("%lld\n",ans[x+y]); 104 } 105 else{ 106 int x; 107 scanf("%d",&x); 108 if(zhong[x]){ 109 ans[col[x]+0]-=sum[x][0]; 110 ans[col[x]+1]-=sum[x][1]; 111 ans[1-col[x]+0]+=sum[x][0]; 112 ans[1-col[x]+1]+=sum[x][1]; 113 for(i=0;i<g1[x].size();i++){ 114 ll v=g1[x][i].id,w=g1[x][i].w; 115 sum[v][col[x]]-=w; 116 sum[v][1-col[x]]+=w; 117 118 } 119 } 120 else{ 121 for(i=0;i<g2[x].size();i++){ 122 ll v=g2[x][i].id,w=g2[x][i].w; 123 ans[col[x]+col[v]]-=w; 124 ans[1-col[x]+col[v]]+=w; 125 if(zhong[v]){ 126 sum[v][col[x]]-=w; 127 sum[v][1-col[x]]+=w; 128 } 129 } 130 } 131 col[x]=1-col[x]; 132 } 133 } 134 } 135 return 0; 136 }
View Code
转载于:https://www.cnblogs.com/starve/p/10864724.html
hdu4467 graph相关推荐
- 图融合GCN(Graph Convolutional Networks)
图融合GCN(Graph Convolutional Networks) 数据其实是图(graph),图在生活中无处不在,如社交网络,知识图谱,蛋白质结构等.本文介绍GNN(Graph Neural ...
- Graph Representation 图神经网络
Graph Representation 图神经网络 图表示学习(representation learning)--图神经网络框架,主要涉及PyG.DGL.Euler.NeuGraph和AliGra ...
- TVM 图优化Graph Optimization
TVM 图优化Graph Optimization Codegen
- ONNX 实时graph优化方法
ONNX 实时graph优化方法 ONNX实时提供了各种图形优化来提高模型性能.图优化本质上是图级别的转换,从小型图简化和节点消除,到更复杂的节点融合和布局优化. 图形优化根据其复杂性和功能分为几个类 ...
- MIT Graph实践概述
MIT Graph实践概述 Features功能 • iCloud Support • Multi Local & Cloud Graphs • Thread Safe • Store Any ...
- list python 转tensor_TensorFlow 中的几个关键概念:Tensor,Operation,Graph,Session
前言:TensorFlow是一种符号式编程框架,首先要构造一个图(graph),然后在这个图上做运算.打个比方,graph就像一条生产线,session就像生产者.生产线具有一系列的加工步骤(加减乘除 ...
- Depth graph
深度相机 定义:可以直接获取场景中物体距离摄像头物理距离的相机.在计算机视觉系统中,三维场景信息为图像分割.目标检测.物体跟踪等各类计算机视觉应用提供了更多的可能性,而深度图像(Depth map)作 ...
- model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践
在本篇文章中主要介绍图数据库 Nebula Graph 在 Jepsen 这块的实践. Jepsen 简介 Jepsen 是一款用于系统测试的开源软件库,致力于提高分布式数据库.队列.共识系统等的安全 ...
- golang通过itemid获取zabbix graph监控图
2019独角兽企业重金招聘Python工程师标准>>> #简述 本文将使用golang和第三方http client 库gorequest编写.如需要只使用golang 标准库可以参 ...
最新文章
- 99%的人都能看懂的分布式最佳「补偿」实践
- 练习1: Python基本语法元素 (第1周)
- boost::multiprecision模块random相关的测试程序
- halcon从入门到精通pdf_机器视觉软件开发新人入门必看 --机器视觉软件开发学习路径...
- MySQL 无符号和有符号的区别
- 作者:刘新海(1976-),男,中国人民银行征信中心副研究员
- mysql双主双从_mysql双主双从
- Android之RecyclerView实现时光轴
- 国外程序猿整理的C++大全
- java后台生成excel_Java后台生成Excel前台下载
- 网易云基于 Kubernetes 的深度定制化实践
- spring boot 中文文档_已献出膝盖!GitHub上的宝藏级SpringBoot核心文档,讲得太清晰了...
- Windows10中安装VMware Workstation Pro 15.x与使用Ubuntu 20.04 LTS
- 几种表面缺陷检测数据集
- 关于Aws SNS的使用 小结
- 备份自查-微博错误代码
- 【Asan】工欲善其事必先利其器——AddressSanitizer
- 微信小程序加签验签(wxapp_rsa,jsencrypt)和egg搭建的后端交互(jsrsasign,node_rsa)最全!!!
- QT项目-“kun容道”
- 《算法导论》学习笔记第一章
热门文章
- C#线程从陌生到熟悉(4)
- Oracle WebCenter 11g 快速开发指南--翻译(一)
- 如果我睡着了请不要叫醒我
- 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
- python中return的理解-python中的return的返回与执行
- python可以干嘛用-Python可以被用来做哪些神奇好玩的事情
- 哪里可以接到python的活干-学了Python以后,我干了很多不是人干的活
- python写文件读文件-Python 实例:读写文件
- python数据分析的主要流程-用Python语言做数据分析基本思路和流程
- python画折线图详解-利用python画折线图