2013 ACM 通化邀请赛D.D-City 并查集
D.D-City
Description
Luxer is a really bad guy. He destroys everything he met.
One day Luxer went to D-city. D-city has N D-points and M D-lines. Each D-line
connects exactly two D-points. Luxer will destroy all the D-lines. The mayor of D-city wants
to know how many connected blocks of D-city left after Luxer destroying the first K D-lines
in the input.
Two points are in the same connected blocks if and only if they connect to each other
directly or indirectly.
Input
First line of the input contains two integers N and M.
Then following M lines each containing 2 space-separated integers u and v, which
denotes an D-line.
Constraints:
0 < N <= 10000
0 < M <= 100000
0 <= u, v < N.
Output
Output M lines, the ith line is the answer after deleting the first i edges in the input.
Sample Input
5 10
0 1
1 2
1 3
1 4
0 2
2 3
0 4
0 3
3 4
Sample Output
1
1
1
2
2
2
2
3
4
5
Hint
The graph given in sample input is a complete graph, that each pair of vertex has an edge
connecting them, so there's only 1 connected block at first. The first 3 lines of output are
1s because after deleting the first 3 edges of the graph, all vertexes still connected
together. But after deleting the first 4 edges of the graph, vertex 1 will be disconnected with
other vertex, and it became an independent connected block. Continue deleting edges the
disconnected blocks increased and finally it will became the number of vertex, so the last
output should always be N.
反向其实就是一个并查集的合并操作,。听说正向BFS可破,但是没试过
#include<stdio.h>
#include<string.h>
int dele[100010][2];
int father[10010];
int mystack[100010];
int top;
int count;
int getfather(int i)
{
if(father[i] == i)
return i;
else
return father[i] = getfather(father[i]);
}
void merge(int a, int b)
{
a = getfather(a);
b = getfather(b);
if(a == b)
return;
else
{
father[b] = a;
count --;
}
}
int main()
{
int n, m;
while(scanf("%d%d", &n, &m) != EOF)
{
int i;
memset(dele, 0, sizeof(dele));
for(i = 0; i < m; i++)
father[i] = i;
for(i = 0; i < m ; i++)
scanf("%d%d", &dele[i][0], &dele[i][1]);
count = n;
top = 0;
for(i--; i >= 0; i --)
{
mystack[top++] = count;
merge(dele[i][0], dele[i][1]);
}
for(top --; top >= 0; top--)
{
printf("%d\n", mystack[top]);
}
}
return 0;
}
2013 ACM 通化邀请赛D.D-City 并查集的更多相关文章
- 2013 吉林通化邀请赛 D-City 离线型的并查集
题意:给定n个点和m条边,问你拆掉前i条边后,整个图的连同城市的数量. i从1到m. 思路:计算连通的城市,很容易想到并查集,但是题目里是拆边,所以我们可以反向去做. 存下拆边的信息,从后往前建边. ...
- 2013 ACM 通化邀请赛 A. Tutor
A. Tutor Description Lilin was a student of Tonghua Normal University. She is studying at University ...
- 2013 吉林通化邀请赛 Play Game 记忆化搜索
dp[ba][ta][bb][tb]表示a堆牌从下面拿了ba张,从上面拿了ta张.b堆牌从下面拿了bb张,从上面拿了tb张.当前玩家能得到的最大的分数. 扩展方式有4种,ba+1,ta+1,bb+1, ...
- 2013 吉林通化邀请赛 Tutor 有点坑的水题
计算12个数的和的平均数.四舍五入,不能有后导0. 我的做法是,将答案算出后,乘以1000,然后看个位是否大于等于5,判断是否要进位…… #include<iostream> #inclu ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- HDU ACM 2586 How far away ?LCA->并查集+Tarjan(离线)算法
题意:一个村子有n个房子,他们用n-1条路连接起来,每两个房子之间的距离为w.有m次询问,每次询问房子a,b之间的距离是多少. 分析:近期公共祖先问题,建一棵树,求出每一点i到树根的距离d[i],每次 ...
- [tsA1491][2013中国国家集训队第二次作业]家族[并查集]
m方枚举,并查集O(1)维护,傻逼题,,被自己吓死搞成神题了... #include <bits/stdc++.h> using namespace std; struct tri { i ...
- 西安邀请赛-D(带权并查集+背包)
题目链接:https://nanti.jisuanke.com/t/39271 题意:给定n个物品,m组限制,每个物品有个伤害值,现在让两个人取完所有物品,要使得两个人取得物品伤害值之和最接近,输出伤 ...
- hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...
随机推荐
- Dom之表单提交与默认行为
一.button提交表单 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- SQL中 EXCEPT、INTERSECT用法
EXCEPT 返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值). INTERSECT 返回 两个结果集的交集(即两个查询都返回的所有非重复值). UNION返回两个结果集的并集. 语 ...
- 目录操作工具类 CopyDir.java
package com.util; import java.io.*; /** * 1,建立目的目录. 2,遍历源目录. 3,遍历过程中,创建文件或者文件夹. 原理:其实就是改变了源文件或者目录的目录 ...
- javascript 对象中的 handleEvent
在高级浏览器中,我们在绑定事件的时候 可以知道绑定一个对象,然后在这个对象中的 handleEvent 方法会自动进入指定的方法,不多说了举个例子吧!! var events = { handleEv ...
- [nginx]Nginx禁止访问robots.txt防泄漏web目录
关于robots.txt文件:搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息.您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网 ...
- C#时间日期格式大全
C#时间/日期格式大全,C#时间/日期函数大全 有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2016-7-1 14:33:34 如果要换成成201607,07-2016,2016-7- ...
- 用jquery在必填表单字段前加红星总结
一.总结: 今天公司项目中要求给表单中的必填字段添加标记,因为表单字段比较多,后期又有可能某些字段会有变化,所以写了一段js代码来给表单添加标记. html代码: js代码: 关键步骤: 1.红星的设 ...
- HackerRank "Bike Racer"
Just for study from its editorial~ Lesson learnt: an optimized Hungarian Algorithm: Hopcroft-Karp Al ...
- SPOJ #500. Turbo Sort
Sorting is not an out-dated topic. My own in-place qsort got TLE... so, I simply called stl::sort() ...
- Linux Modules Introduction
Modules are small kernel extensions ,that may be loaded and unloaded at will● Can implement drivers, ...