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. Geometry-587. Erect the Fence

    There are some trees, where each tree is represented by (x,y) coordinate in a two-dimensional garden ...

  2. php-echo原理

    1.语法分析 unticked_statement: | T_ECHO echo_expr_list ';' ; echo_expr_list: echo_expr_list TSRMLS_CC); ...

  3. javascript数据结构与算法--二叉树遍历(中序)

    javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...

  4. easyui datagrid里的复选框置灰方法

    easyui datagrid里的复选框置灰方法: $('.datagrid input').prop('disabled',true);//复选框置灰

  5. centos shell 编程-通过端口号kill对应的进程

    centos shell 编程-通过端口号kill对应的进程 方式一.端口固定 ------------------killportprocess.sh fSum() {    pid=$(lsof ...

  6. Java之集合(二)ArrayDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7283928.html 1.前言 上章讲解了Java中的集合接口和相关实现抽象类,本章开始介绍一些具体的实现类,第 ...

  7. Pycharm常用快捷键,以及设置

    工欲善其事必先利其器,Python开发利器Pycharm常用快捷键以及配置如下,相信有了这些快捷键,你的开发会事半功倍 一 常用快捷键 编辑类: Ctrl + D             复制选定的区 ...

  8. 【Java并发编程】:深入Java内存模型—内存操作规则总结

    主内存与工作内存 java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量主要是指共享变量,存在竞争问题的变量.Java内存模 ...

  9. gles2.0环境的在windows上的建立

    这里也有一个视频来讲解,大家可以看下,可以多提问题,意见,建议 http://edu.csdn.net/course/detail/606 #include <Windows.h> #in ...

  10. 关于开发板用tftp下载失败分析

    一.想实现开发板和PC ping通:(1)windows和linux桥接(2)用路由器将开发板和PC连接起来(3)将windows和linux以及开发板的IP设置成同一网段,注意不要和你同一个局域网的 ...