zoj 3261 逆向并查集+离线处理
题意:给出一些点,每个点有权值,然后有一些边,相连。无向的。然后有一些操作
链接:点我
query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大)
destory a,b 表示删除连接a,b的边
逆向并查集。
把没有删除的边先加入并查集,一个集合内表示连通的,根结点为权值最大的点。
然后对于查询离线读入,从最后开始操作,对于删除的点,然后重新加入到并查集中,更新最值。
查询的时候便是查询根结点的值是否大于自身的值
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <iostream> 5 #include <map> 6 using namespace std; 7 8 const int MAXN=10010; 9 int F[MAXN]; 10 int p[MAXN]; 11 int val[MAXN];//最大值的下标 12 int num[MAXN];//最大值 13 int find(int x) 14 { 15 if(F[x]==-1)return x; 16 return F[x]=find(F[x]); 17 } 18 void bing(int u,int v) 19 { 20 int t1=find(u),t2=find(v); 21 if(t1!=t2) 22 { 23 F[t1]=t2; 24 if(num[t1]>num[t2]) 25 { 26 num[t2]=num[t1]; 27 val[t2]=val[t1]; 28 } 29 else if(num[t1]==num[t2] && val[t2]>val[t1]) 30 val[t2]=val[t1]; 31 } 32 } 33 map<int,int>mp[MAXN]; 34 struct Edge 35 { 36 int u,v; 37 }edge[20010]; 38 bool used[20010]; 39 struct Node 40 { 41 int op; 42 int u,v; 43 }node[50010]; 44 int ans[50010]; 45 char str[20]; 46 int main() 47 { 48 int n; 49 int Q; 50 int m; 51 int u,v; 52 bool first=true; 53 while(scanf("%d",&n)==1) 54 { 55 if(first)first=false; 56 else printf("\n"); 57 memset(F,-1,sizeof(F)); 58 for(int i=0;i<n;i++) 59 { 60 scanf("%d",&p[i]); 61 val[i]=i; 62 num[i]=p[i]; 63 mp[i].clear(); 64 } 65 66 scanf("%d",&m); 67 for(int i=0;i<m;i++) 68 { 69 scanf("%d%d",&u,&v); 70 if(u>v)swap(u,v); 71 mp[u][v]=i; 72 edge[i].u=u; 73 edge[i].v=v; 74 used[i]=false; 75 } 76 scanf("%d",&Q); 77 for(int i=0;i<Q;i++) 78 { 79 scanf("%s",&str); 80 if(str[0]=='q') 81 { 82 node[i].op=0; 83 scanf("%d",&node[i].u); 84 } 85 else 86 { 87 node[i].op=1; 88 scanf("%d%d",&u,&v); 89 if(u>v)swap(u,v); 90 node[i].u=u; 91 node[i].v=v; 92 int tmp=mp[u][v]; 93 used[tmp]=true; 94 } 95 } 96 for(int i=0;i<m;i++) //没有拆的点连上 97 if(!used[i]) 98 { 99 bing(edge[i].u,edge[i].v); 100 } 101 int cnt=0; 102 for(int i=Q-1;i>=0;i--) 103 { 104 if(node[i].op==0) 105 { 106 u=node[i].u; 107 int t1=find(u); 108 if(num[t1]>p[u])ans[cnt++]=val[t1]; 109 else ans[cnt++]=-1; 110 } 111 else 112 { 113 bing(node[i].u,node[i].v); 114 } 115 } 116 for(int i=cnt-1;i>=0;i--)printf("%d\n",ans[i]); 117 } 118 return 0; 119 }
转载于:https://www.cnblogs.com/cnblogs321114287/p/4487753.html
zoj 3261 逆向并查集+离线处理相关推荐
- LC-1697. 检查边长度限制的路径是否存在(并查集+离线)
1697. 检查边长度限制的路径是否存在 难度困难109 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 v ...
- [逆向并查集+STLmap存图奇法] Connections in Galaxy War ZOJ - 3261
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3261 这题 感谢bo同学大力帮助...告诉我 奇技淫巧 虽然思路蛮顺的 题 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- 中石油训练赛 - 奎奎画画(思维+并查集+离线处理)
题目描述 "为你写诗,为你静止,为你做不可能的事",爱情是一种怪事,它让奎奎开始学习画画.奎奎认为一张画的艺术价值等于画上的白色联通块个数(当一个格子和它上下左右四个方向上的某个相 ...
- CodeForces - 722C Destroying Array(倒着并查集+离线处理)
题目链接:点击查看 题目大意:给出一个数列a,现在给出操作b,每次操作都会删除掉数列a中指定位置的数,问每次删除后,最大连续字段和是多少 题目分析:一开始看到最大连续字段和,以为是要用dp,又看了一下 ...
- 【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- 2022-12-14 LeetcCode 1697.检查边长度限制的路径是否存在【并查集+离线思想】
传送门: 1697. 检查边长度限制的路径是否存在 题目: 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 ...
- Codeforces Round #836 (Div. 2) E.Tick, Tock(在线:带权并查集/离线:dfs判环)
题目 n*m(1<=n,m<=2e5,n*m<=2e5)的网格图, 有一些格子内已经放入了闹钟,当前时刻在[0,h)(1<=h<=1e9)之间 还有一些位置没有放闹钟,输 ...
- zoj 3761(并查集+搜索)
题意:在一个平面上,有若干个球,给出球的坐标,每次可以将一个球朝另一个球打过去(只有上下左右),碰到下一个球之后原先的球停下来,然后被撞的球朝这个方向移动,直到有一个球再也撞不到下一个球后,这个球飞出 ...
- hdu 4496 并查集 逆向 并查集删边
貌似某大犇说过 正难则反,,, 题目说要对这张图进行删边,然后判断联通块的个数,那么就可以先把所有边都删掉,之后从后往前加边,若加的边两端点不在同一个联通块中, 那么此时联通快个数少一,否则不变 1 ...
最新文章
- 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)
- Python 编码规范(Google) (一)
- 力扣——LCP 37. 最小矩形面积(困难)
- 使用surface初体验
- jsp页面显示富文本框内容
- 计算机网络复习题大全(各种题型)
- c语言荷兰国旗问题算法,荷兰国旗问题
- Windows 安装 Oracle Java JDK
- 模糊粗糙集及数据降维
- 电脑上有什么好用的卸载软件?--geek 卸载神器
- 常见的监控项目组网方案技术系统图,一文了解清楚!
- To https://gitee.com/xxxx/gittest.git解决方案
- Windows系统拦截广告弹窗
- 微信拼好货商城团购研究转
- 渭南师范计算机学院男女比例,全国高校男女比例大揭秘!去这些大学怕是要单身四年了...
- hiredis的异步处理
- Macbook pro M1基本环境配置
- Ad hoc网络路由协议概述3——按需路由协议(1)DSR协议(Dynamic source routing protocol)
- [Read] XXH00129《视觉SLAM 十四讲》第10讲和第11讲
- VMware虚拟机安装macos Big Sur 11.4 (20F71)教程镜像CDR/ISO下载