#include<iostream> //由于拆除并查集的方法太难或者没有
#include<cstdio> //可以先将所有没有拆的桥连接 再逆向操作 断开变成连接 反向输出
#include<map>
using namespace std;

const int Hash = 10000;
const int N = 10005;
const int M = 20005;

map<int, bool>mp; //mp用来标记该桥是否会被拆,如果会被拆就先不要连接

int f[N];
int rank[N];
int ans[50005]; // ±£´æ´ð°¸

struct Buit{
int u, v;
}built[M];

struct Query{
char cmd[10];
int a, b;
}query[50005];

int find(int x){
f[x]=f[x]==x?x:find(f[x]);
}
void Union(int x,int y){
int a=find(x),b=find(y);;
if(a==b)return ;
if(rank[a]>rank[b]) f[b]=a;
else if(rank[a]<rank[b]) f[a]=b;
else{
if(a>b) f[a]=b;
else f[b]=a;
}
}
int main()
{
//freopen("input.txt","r",stdin);
int n,m,Q,k,ok=0;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&rank[i]);
scanf("%d",&m);

for(int i=0;i<m;i++){
scanf("%d%d",&built[i].u,&built[i].v);
if(built[i].u>built[i].v)
swap(built[i].u,built[i].v);
}

scanf("%d",&Q);
mp.clear();
for(int i=0;i<Q;i++){
scanf("%s",query[i].cmd);
if(query[i].cmd[0]=='q'){
scanf("%d",&query[i].a);
}
else{
scanf("%d%d",&query[i].a,&query[i].b);
if(query[i].a>query[i].b)
swap(query[i].a,query[i].b);
mp[query[i].a*Hash+query[i].b]=true;
}
}
for(int i=0;i<n;i++)
f[i]=i;
for(int i=0;i<m;i++)
if(!mp[built[i].u*Hash+built[i].v])
Union(built[i].u,built[i].v);
k=0;
for(int i=Q-1;i>=0;i--)
{
if(query[i].cmd[0]=='q'){
if(rank[find(query[i].a)]>rank[query[i].a])
ans[k++]=find(query[i].a);
else
ans[k++]=-1;
}
else{
Union(query[i].a,query[i].b);
}
}
if(ok)
printf("\n");
ok=1;
for(int i=k-1;i>=0;i--){
printf("%d\n",ans[i]);
}
}
return 0;
}

逆向并查集 hrbust 1913的更多相关文章

  1. ZOJ 3261 Connections in Galaxy War(逆向并查集)

    参考链接: http://www.cppblog.com/yuan1028/archive/2011/02/13/139990.html http://blog.csdn.net/roney_win/ ...

  2. HDU - 4496 City 逆向并查集

    思路:逆向并查集,逆向加入每一条边即可.在获取联通块数量的时候,直接判断新加入的边是否合并了两个集合,如果合并了说明联通块会减少一个,否则不变. AC代码 #include <cstdio> ...

  3. zoj 3261 逆向并查集+离线处理

    题意:给出一些点,每个点有权值,然后有一些边,相连.无向的.然后有一些操作 链接:点我 query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大) desto ...

  4. HDU_4496_逆向并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=4496 逆向并查集,先读取,然后从后向前join每次保存答案即可. #include<iostream> ...

  5. ZOJ - 3261 逆向并查集

    思路:很巧妙的解法.如果按照常规一边读入,一边合并并查集,删边实在没办法做. 首先读入所有的操作,把所有不会被删除的边加入并查集,然后从最后一个操作开始逆向操作,当遇到删边操作,就直接把这条边加入并查 ...

  6. Connections in Galaxy War (逆向并查集)题解

    Connections in Galaxy War In order to strengthen the defense ability, many stars in galaxy allied to ...

  7. BZOJ 1016 星球大战starwar(逆向-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1015 题意:给出一个图.每次删掉一个点,求删掉之后连通块个数. 思路:正着做不好做,我们 ...

  8. HDU 4496 D-City(逆向并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=4496 题意: 给出n个顶点m条边的图,每次选择一条边删去,求每次删边后的连通块个数. 思路: 离线处理删边,从后 ...

  9. ZOJ3261:Connections in Galaxy War(逆向并查集)

    Connections in Galaxy War Time Limit: 3 Seconds      Memory Limit: 32768 KB 题目链接:http://acm.zju.edu. ...

随机推荐

  1. 使用 phpMyAdmin无法登录mysql的问题

    今天使用使用phpmyadmin时出现了以下错误: (1)第一次时: 当配置文件config.inc.php里的配置项是: $cfg['Servers'][$i]['host'] = 'localho ...

  2. 一个简单LINUX程序的逆向

    开始之前的准备: 反汇编:IDA 十六进制编辑器: Hexworkshop LINUX环境: KALI LINUX 调试: EDB (KALI自带的) 一个简单的动态追码, 大牛们就略过吧…… 用16 ...

  3. 父Prefab与子prefab问题

    PrefabRevolution 原文:http://framebunker.com/blog/poor-mans-nested-prefabs/   (溜还是老外溜啊) 有些时候需要在Prefab里 ...

  4. JAVA构造方法,继承关系和SUPER关键字

    SUPER可调用父类的构造方法,但要注意默认调用和参数调用. 同时,在继承类时,可以用SUPER调用其它非构造方法哟. class Test extends Object{ public Test() ...

  5. 虚拟机LUN扩大后,重新分区

    [root@ywcrmdb ~]# fdisk -l Disk /dev/sda: 751.6 GB, 751619276800 bytes 255 heads, 63 sectors/track, ...

  6. HDOJ 1058 Humble Numbers(打表过)

    Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The ...

  7. HDU5125--magic balls(LIS)

    题意:求a数组的LIS,但是加了一个条件,为了LIS最大 b[i] a[i]可以交换.最多交换mci: 赤果果的dp啊,可是这个题用线段树的话却会TLE,,由于查询的只是1-x的最大值 因此我们可以用 ...

  8. HDU5029--Relief grain (树链剖分+线段树 )

    题意:n个点构成的无根树,m次操作, 对于操作 x y z, 表示 x 到 y 路径上的 每个点 加一个 z 数字,可重复加.最后输出每个点 加的次数最多的那个数字,如果没有输出0. 赤裸裸的树链剖分 ...

  9. java与数据结构(8)---java实现链队列

    链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...

  10. 个性化品牌开始繁荣?为设计师和代工厂牵线的平台Maker's Row获得100万美元融资 | 36氪

    个性化品牌开始繁荣?为设计师和代工厂牵线的平台Maker's Row获得100万美元融资 | 36氪 个性化品牌开始繁荣?为设计师和代工厂牵线的平台Maker's Row获得100万美元融资