zoj3261 并查集离线处理
Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu
Description
In order to strengthen the defense ability, many stars in galaxy allied together and built many bidirectional tunnels to exchange messages. However, when the Galaxy War began, some tunnels were destroyed by the monsters from another dimension. Then many problems were raised when some of the stars wanted to seek help from the others.
In the galaxy, the stars are numbered from 0 to N-1 and their power was marked by a non-negative integer pi. When the star A wanted to seek help, it would send the message to the star with the largest power which was connected with star A directly or indirectly. In addition, this star should be more powerful than the star A. If there were more than one star which had the same largest power, then the one with the smallest serial number was chosen. And therefore, sometimes star A couldn't find such star for help.
Given the information of the war and the queries about some particular stars, for each query, please find out whether this star could seek another star for help and which star should be chosen.
Input
There are no more than 20 cases. Process to the end of file.
For each cases, the first line contains an integer N (1 <= N <= 10000), which is the number of stars. The second line contains N integersp0, p1, ... , pn-1 (0 <= pi <= 1000000000), representing the power of the i-th star. Then the third line is a single integer M (0 <= M <= 20000), that is the number of tunnels built before the war. Then M lines follows. Each line has two integers a, b (0 <= a, b <= N - 1, a !=b), which means star a and star b has a connection tunnel. It's guaranteed that each connection will only be described once.
In the (M + 2)-th line is an integer Q (0 <= Q <= 50000) which is the number of the information and queries. In the following Q lines, each line will be written in one of next two formats.
- "destroy a b" - the connection between star a and star b was destroyed by the monsters. It's guaranteed that the connection between star a and star b was available before the monsters' attack.
- "query a" - star a wanted to know which star it should turn to for help
There is a blank line between consecutive cases.
Output
For each query in the input, if there is no star that star a can turn to for help, then output "-1"; otherwise, output the serial number of the chosen star.
Print a blank line between consecutive cases.
Sample Input
2
10 20
1
0 1
5
query 0
query 1
destroy 0 1
query 0
query 1
Sample Output
-1
-1
-1
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<string>
#include<time.h>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1000000001
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int MAXN = ;
struct node
{
char s[];
int x;
int y;
}q[],rel[];
int pa[MAXN],n,m;
int a[MAXN];
map<int,int>mp[MAXN];
void Init()
{
for(int i = ; i < n; i++){
scanf("%d",&a[i]);
pa[i] = i;
mp[i].clear();
}
}
int ans[];
int find(int x)
{
if(x != pa[x])pa[x] = find(pa[x]);
return pa[x];
}
void Union(int x,int y)
{
int fx = find(x);
int fy = find(y);
if(fx != fy){
if(a[fx] > a[fy]){
pa[fy] = fx;
}
else if(a[fy] > a[fx]){
pa[fx] = fy;
}
else if(fx > fy){
pa[fx] = fy;
}
else {
pa[fy] = fx;
}
}
}
int main()
{
int t,ff = ;
while(~scanf("%d",&n)){
if(ff)printf("\n");
ff = ;
Init();
scanf("%d",&m);
for(int i = ; i <= m; i++){
scanf("%d%d",&rel[i].x,&rel[i].y);
if(rel[i].x > rel[i].y)swap(rel[i].x,rel[i].y);
}
int fq;
scanf("%d",&fq);
for(int i = ; i <= fq; i++){
scanf("%s",q[i].s);
if(q[i].s[] == 'q'){
scanf("%d",&q[i].x);
}
else {
scanf("%d %d",&q[i].x,&q[i].y);
if(q[i].x > q[i].y){
swap(q[i].x,q[i].y);
}
mp[q[i].x][q[i].y] = ;
}
}
for(int i = ; i <= m; i++){
if(!mp[rel[i].x][rel[i].y]){
Union(rel[i].x,rel[i].y);
}
}
int k = ;
for(int i = fq; i >= ; i--){
if(q[i].s[] == 'q'){
int x = q[i].x;
int fx = find(x);
if(a[fx] > a[x]){
ans[k++] = fx;
}
else ans[k++] = -;
}
else {
Union(q[i].x,q[i].y);
}
}
for(int i = k - ; i >= ; i--){
printf("%d\n",ans[i]);
}
}
return ;
}
zoj3261 并查集离线处理的更多相关文章
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理
BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k ...
- poj 2528 Mayor's posters 线段树 || 并查集 离线处理
题目链接 题意 用不同颜色的线段覆盖数轴,问最终数轴上有多少种颜色? 注:只有最上面的线段能够被看到:即,如果有一条线段被其他的线段给完全覆盖住,则这个颜色是看不到的. 法一:线段树 按题意按顺序模拟 ...
- ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
Description Byteland国家的网络单向传输系统可以被看成是以首都 Bytetown为中心的有向树,一开始只有Bytetown建有基站,所有其他城市的信号都是从Bytetown传输过来的 ...
- BZOJ-1015 StarWar星球大战 并查集+离线处理
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Submit: 4105 Solved: 1826 [Submit ...
- 【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- zoj 3261 逆向并查集+离线处理
题意:给出一些点,每个点有权值,然后有一些边,相连.无向的.然后有一些操作 链接:点我 query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大) desto ...
- bzoj1015星球大战(并查集+离线)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5572 Solved: 2563 Descri ...
- ZOJ3261-Connections in Galaxy War-(逆向并查集+离线处理)
题意: 1.有n个星球,每个星球有一个编号(1-n)和一个能量值. 2.一开始将某些星球连通. 3.开战后有很多个操作,查询某个星球能找谁求救或者摧毁两颗星球之间的连通路径,使其不能连通.如果连通则可 ...
随机推荐
- 多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用 今早上接到一个电话,自已多年前写的一个ASP.NET网站管理系统,一个公司在用,出了点问题, 第一点是惊奇,5,6年前的东东,手机号码换了 ...
- nginx访问白名单设置以及根据$remote_addr分发
在日常运维工作中,会碰到这样的需求:设置nginx的某个域名访问只对某些ip开放,其他ip的客户端都不能访问.达到这样的目的一般有下面两种设置方法:(1)针对nginx域名配置所启用的端口(一般是80 ...
- php base64 原理
#include <stdio.h> #include <stdlib.h> #include <string.h> static const char base6 ...
- AI图片剪切
来源:http://tieba.baidu.com/p/1203332701?pid=14163166977&cid=78618096662&from=prin#78618096662 ...
- Openjudge 3.9-3339
3339:List 总时间限制: 4000ms 内存限制: 65536kB 描述 写一个程序完成以下命令:new id --新建一个指定编号为id的序列(id<10000)add id num- ...
- 笔记 (note)
笔记[问题描述]给定一个长度为m的序列a,下标编号为1~m.序列的每个元素都是1~n的整数.定义序列的代价为m−1 ∑|ai+1-ai| i=1 你现在可以选择两个数x和y,并将序列a中所有的x改成y ...
- BZOJ 2957 楼房重建
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- netcore 控制台中文乱码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.OutputEncoding = Encoding.Get ...
- IE8和W3C标准下IFRAME刷新和URL的区别
一个页面中包含了一个iframe,我们要刷新这个iframe的情况 url在IE8和W3C以及IE11的区别如下: URL使用相对路径,绝对路径比如http://localhost:5568/替换成I ...
- 批量修改string中的字符
#1,修改"/"为"\\",多用于在txt读取内容后进行修改 size_t pos0 = mkfolder.find("/");//首次查找 ...