Problem 2155 盟国

Accept: 39    Submit: 129
Time Limit: 1000 mSec    Memory Limit : 32768
KB

Problem Description

世界上存在着N个国家,简单起见,编号从0~N-1,假如a国和b国是盟国,b国和c国是盟国,那么a国和c国也是盟国。另外每个国家都有权宣布退盟(注意,退盟后还可以再结盟)。

定义下面两个操作:

“M X Y” :X国和Y国结盟

“S X” :X国宣布退盟

Input

多组case。

每组case输入一个N和M (1 ≤ N ≤ 100000 , 1 ≤ M ≤ 1000000),N是国家数,M是操作数。

接下来输入M行操作

当N=0,M=0时,结束输入

Output

对每组case输出最终有多少个联盟,格式见样例。

Sample Input

5 6
M 0 1
M 1 2
M 1 3
S 1
M 1 2
S 3
3 1
M 1 2
0 0

Sample Output

Case #1: 3
Case #2: 2
 
超时超时超时.....
 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std; int f[];
bool use[];
int cnt;
int n,m;
int find(int x)
{
int i=x,r;
while(f[x]!=x)
x=f[x];
while(i!=x)
{
r=f[i];
f[i]=x;
i=r;
}
return x;
}
void Union(int x,int y)
{
int x1,y1;
x1=find(x);
y1=find(y);
if(x1==y1) return;
else
{
if(x1<n && y1<n)
{
f[x1]=cnt;
f[y1]=cnt++;
}
else if(x1>=n || y1>=n)
{
if(x1>=n)
f[y1]=x1;
else f[x1]=y1;
}
}
}
int main()
{
int i,k,x,y,Num,t=;
char cur[];
while(scanf("%d%d",&n,&m)>)
{
if(n==&&m==)break;
for(i=;i<=m;i++)
{
f[i]=i;
use[i]=false;
}
cnt=n+;
for(i=;i<=m;i++)
{
scanf("%s",cur);
if(cur[]=='M')
{
scanf("%d%d",&x,&y);
Union(x,y);
}
else if(cur[]=='S')
{
scanf("%d",&x);
f[x]=x;
}
}
Num=;
for(i=;i<n;i++)
find(i);
for(i=;i<n;i++)
{
k=f[i];
use[k]=true;
}
for(i=;i<=m;i++)
if(use[i]==true) Num++;
printf("Case #%d: ",++t);
printf("%d\n",Num);
}
return ;
}

fzu 2155 盟国的更多相关文章

  1. HDU 2473 Junk-Mail Filter 并查集删除(FZU 2155盟国)

    http://acm.hdu.edu.cn/showproblem.php?pid=2473 http://acm.fzu.edu.cn/problem.php?pid=2155 题目大意: 编号0~ ...

  2. HITtrainning20140417题解

    题目列表:     ID Origin Title 10 / 15 Problem A FZU 2152 文件系统   0 / 16 Problem B FZU 2153 A simple geome ...

  3. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

  4. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  5. ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】

     FZU 2105  Digits Count Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  6. FZU 2112 并查集、欧拉通路

    原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...

  7. ACM: FZU 2107 Hua Rong Dao - DFS - 暴力

    FZU 2107 Hua Rong Dao Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  8. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  9. ACM: FZU 2102 Solve equation - 手速题

     FZU 2102   Solve equation Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

随机推荐

  1. 換根lca

    假設我們要求u,v,在根為rt情況下的lca 則lca為lca(u,v),lca(u,rt),lca(v,rt)中的深度的最大值

  2. Tree-669. Trim a Binary Search Tree

    Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that a ...

  3. hdu5833----高斯消元

    题目大意: 给你n个整数,从中选一些数,他们的乘积为一个完全平方数 问有多少种这样的方式,已知这些数的素因素不超过2000. 思路: 一个完全平方数素因素的个数肯定是偶数个. 我们只要从n个数中选取所 ...

  4. 【wireshark】总体结构

    1. 总体结构 wireshark的总体结构如下图所示. 2. 功能模块 模块名 功能 源码子目录 GTK/Qt 处理所有的用户输入/输出(所有的窗口,对话框等等) /ui GTK: /ui/gtk ...

  5. 线程TLAB局部缓存区域(Thread Local Allocation Buffer)

    TLAB(Thread Local Allocation Buffer) 1,堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的 2,Sun ...

  6. 【xsy1611】 数位dp 数位dp

    这题是显然的数位$dp$,然而我居然写了一个下午!!! 我们不难想到差分,令$solve(x,y)$表示从第一个数字在区间$[0,x]$,第二个数字在区间$[0,y]$的答案. 不难发现题目中给了你一 ...

  7. 【bzoj3028】 食物 生成函数+隔板法

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 这题的推导很妙啊,裸的推母函数的题. 我们首先构造出每种食物的母函数: 汉堡:$ ...

  8. 【BZOJ1069】【SCOI2007】最大土地面积

    题目大意:给定有n个点的点集,求该点集中任意四个点所构成的四边形中面积最大四边形的面积. 我们不难想到(不难yy出来),面积最大的四边形的四个顶点一定所给定的点集所构成的凸包上.我们求出给定点集的集合 ...

  9. linux 手动释放buff/cache

    为了解决buff/cache占用过多的问题执行以下命令即可 syncecho 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_ ...

  10. Lingo 做线性规划 - Operation Management Applications

    Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...