1671. Anansi's Cobweb(并查集)
并查集 对于询问删除边之后的连通块 可以倒着加边 最后再倒序输出
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 100010
int p[N],father[N],a,b,f[N];
int pp[N];
struct node
{
int x,y;
}ed[N];
int find(int x)
{
if(father[x]!=x)
father[x] = find(father[x]);
return father[x];
}
void add(int a,int b)
{
int x = find(a);
int y = find(b);
if(x!=y)
father[x] = y;
}
int main()
{
int i,n,m,q;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(f,,sizeof(f));
for(i =; i <= n ; i++)
father[i] = i;
for(i = ; i <= m ; i++)
{
scanf("%d%d",&ed[i].x,&ed[i].y);
}
scanf("%d",&q);
for(i = ; i <= q ;i++)
{
scanf("%d",&p[i]);
f[p[i]] = ;
}
for(i = ; i <= m ; i++)
{
if(!f[i])
add(ed[i].x,ed[i].y);
}
int num = ;
for(i = ; i <= n ; i++)
if(father[i]==i)
num++;
pp[] = num;
int o = ;
for(i = q ; i> ; i--)
{
int x = find(ed[p[i]].x);
int y = find(ed[p[i]].y);
if(x==y)
{
pp[++o] = num;
continue;
}
else
{
father[x] = y;
num--;
pp[++o] = num;
}
}
for(i = o ; i > ; i--)
printf("%d ",pp[i]);
printf("%d\n",pp[]);
}
return ;
}
1671. Anansi's Cobweb(并查集)的更多相关文章
- URAL 1671 Anansi's Cobweb (并查集)
题意:给一个无向图.每次查询破坏一条边,每次输出查询后连通图的个数. 思路:并查集.逆向思维,删边变成加边. #include<cstdio> #include<cstring> ...
- ural 1671 Anansi's Cobweb
这道题是并差集的简单应用 #include <cstdio> #include <cstring> #include <algorithm> #define max ...
- ural1671 Anansi's Cobweb
Anansi's Cobweb Time limit: 1.0 secondMemory limit: 64 MB Usatiy-Polosatiy XIII decided to destroy A ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- 关押罪犯 and 食物链(并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- bzoj1854--并查集
这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)
Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...
随机推荐
- html5实现渐变效果
<canvas id='test01'></canvas> <script> function draw25(id) { var canvas = document ...
- [SQL Server]树形结构的创建
对于SQL Server来说,构建显示一个树形结构不是一件容易的事情,逻辑构造能力不是它的强项.不过也不是说它没有能力干这个事情,只要换一种思维方式就可以理解它的工作原理. 例如,现在有一张表的内容如 ...
- javascript实现URL不缓存的方法
<script> document.write("<s"+"cript type='text/javascript' src='/js/test.js? ...
- vb6-很简单的配置密码验证提示
'很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...
- 1065. A+B and C (64bit)
#include<stdio.h> #include <math.h> int main() { long long a,b,c,sum; int n,i; while(sca ...
- Truncating HTML attribute value in SharePoint DataFormWebPart
<xsl:value-ofdisable-output-escaping="yes"select="@Body"/>
- hive-site.xml 参数设置
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="confi ...
- python学习笔记9(对文件的操作)
一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. 二.相关函数 [1].内建函数:open() 提供了初始化输入/输出(I/O)操作的通用接口,成功打开一个文件后会返回一个 ...
- Code for the Homework1 改进
#include <iostream> #include <vector> #include "shape.h" //using namespace std ...
- 实用程序Commer的开发——U盘内容可选同步至FTP服务器
需求分析:需要在软件运行后将插入的U盘里面的文件Copy至本机上,然后可选的上传一部分至FTP服务器上. 系统设计:基于MFC的基本对话框程序:主要模块有检测U盘插入并复制文件以及上传到网络.通过对U ...