点击打开链接zoj 3261

思路: 带权并查集
分析:
1 题目说的是有n个星球0~n-1,每个星球都有一个战斗值。n个星球之间有一些联系,并且n个星球之间会有互相伤害
2 根本没有思路的题,看了网上的思路才知道是逆向并查集。如果我们按照正常的并查集来做,以战斗值最大为根节点的话,当询问的时候很容易,但是碰到删除边的时候就很困难了,所以这里才用逆向的并查集思路
3 我们先把所有的输入保存,然后我们可以这么考虑,从后面往前面枚举q次条件,如果是destroy我们认为是加边,这样的话就很好维护并查集了
4 但是这边我们还要考虑初始的状态,由于涉及到删边而且不一定是删除所有的边,所以我们只要在m个关系里面扣除要删除的边,然后建立集合做为初始的状态

代码:

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;const int MAXN = 50010;struct Node{int mark;int x;int y;
};
Node node[MAXN];
Node edge[MAXN];int n , m , q;
int val[MAXN];
int father[MAXN];
int ans[MAXN];
map<int , int>mp;void init(){mp.clear();for(int i = 0 ; i < n ; i++)father[i] = i;
}int find(int x){if(father[x] != x)father[x] = find(father[x]); return father[x];
}void Union(int x , int y){int fx = find(x); int fy = find(y); if(fx != fy){if(val[fx] > val[fy])father[fy] = fx;else if(val[fx] < val[fy])father[fx] = fy;else{if(fx < fy) father[fy] = fx;elsefather[fx] = fy;}}
}void solve(){for(int i = 0 ; i < m ; i++){if(mp[edge[i].x*MAXN+edge[i].y])continue;Union(edge[i].x , edge[i].y);}int pos = 0;for(int i = q-1 ; i >= 0 ; i--){if(node[i].mark == 0){int fx = find(node[i].x); // 这边不能写成的node[i].x != fx;// 因为有可能跟节点和它的值相同if(val[node[i].x] >= val[fx])ans[pos++] = -1;elseans[pos++] = fx;}elseUnion(node[i].x , node[i].y);}for(int i = pos-1 ; i >= 0 ; i--)printf("%d\n" , ans[i]);
}int main(){int x , y;char str[10];bool first = true; while(scanf("%d" , &n) != EOF){if(first)first = false;elseputs("");for(int i = 0 ; i < n ; i++) scanf("%d" , &val[i]);init();scanf("%d" , &m); for(int i = 0 ; i < m ; i++){scanf("%d%d" , &edge[i].x , &edge[i].y);if(edge[i].x > edge[i].y)swap(edge[i].x , edge[i].y);}scanf("%d" , &q); for(int i = 0 ; i < q ; i++){scanf("%s" , str); if(str[0] == 'q'){scanf("%d" , &node[i].x);node[i].mark = 0;}else{scanf("%d%d" , &node[i].x , &node[i].y);if(node[i].x > node[i].y)swap(node[i].x , node[i].y);node[i].mark = 1;mp[node[i].x*MAXN+node[i].y] = 1;}}solve();}return 0;
}

转载于:https://www.cnblogs.com/dyllove98/p/3249446.html

zoj 3261 Connections in Galaxy War相关推荐

  1. [逆向并查集+STLmap存图奇法] Connections in Galaxy War ZOJ - 3261

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3261 这题 感谢bo同学大力帮助...告诉我 奇技淫巧 虽然思路蛮顺的 题 ...

  2. Connections in Galaxy War

    题意: 假设有编号从0开始的n个点,每个点都有一个非负权值p[i].现在有没有重边的m条边和Q个操作. 对于操作有两种类型 destroy a b 表示摧毁a,b点之间的边 query a 表示从a出 ...

  3. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  4. POJ 并查集 题目汇总 ——czyuan原创(转)

    继续数据结构的复习,本次的专题是:并查集. 并查集,顾名思义,干的就是"并"和"查"两件事.很多与集合相关的操作都可以用并查集高效的解决. 两个操作代码:    ...

  5. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  6. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  7. 老鱼的-kuangbin专题题解

    kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...

  8. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

最新文章

  1. java 虚拟打印机_Java 通过物理、虚拟打印机打印Word文档
  2. 16道嵌入式C语言面试题
  3. C#遍历文件读取Word内容以及使用BackgroundWorker对象打造平滑进度条
  4. 浅谈python_浅谈python-Django
  5. 2018.07.11 线段树基本模板复习
  6. 浅谈:数据结构之单链表,java代码演示单链表
  7. Error: Another program is already listening on a port that one of our HTTP servers is configured to
  8. Android接入百度自动更新SDK
  9. Kotlin 学习笔记08
  10. axure 输入框默认灰色字_Axure如何应对意外关闭
  11. 15.IDA-查看XREF列表(Ctrl+x)
  12. JAVA中整数类型数据溢出问题研究
  13. 图文:centos5.3下VMware虚拟机NAT上网实现
  14. 坦克类游戏的制作之路
  15. 高防虚拟主机怎么选?
  16. 使用yaml文件指定 kata 安全容器配置相关参数
  17. android 实现 bilili 动画播放效果
  18. 笔记本电脑外接显示器接口类型
  19. BERT模型的结构,特点和实践
  20. linux删除除非某某文件,find命令查找比某个文件新或...-linux下删除某一时间段的文件-scp命令在两台服务器直接进行文件传输的方法_169IT.COM...

热门文章

  1. python elem_Python
  2. android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...
  3. 2021牛客暑期多校训练营5,签到题BDHJK
  4. 【CCCC】L3-012 水果忍者 (30分),,枚举斜率
  5. 【NOIP2017】【Luogu3951】小凯的疑惑
  6. Win10 独立音量调整
  7. asp获取计算机mac,ASP获取客户端MAC地址(源代码)
  8. mysql修改表编码为ytf8_如何修复“TypeError:x和y必须具有相同的数据类型,got”tf.uint8型!= tf.float32型“当我试图以十为单位调整图像大小时...
  9. shell win10 改成cmd_win10系统必做优化,让你的电脑告别卡顿,运行速度至少提升20%...
  10. gcd常见结论及gcd与斐波那契结合--hdu6363.