Regroup

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1057    Accepted Submission(s):
297

Problem Description
When ALPC42 got to a panzer brigade, He was asked to
build software to help them regroup the battalions or companies.
As the
tradition of army, soldiers are rated according his or her abilities, taking the
rate as an integer. The fighting capacity of a company is determined by the
soldier in this company whose rate is lowest. Now the recruits those rated are
coming and join to their companies according to the order form HQ.
With the
coming of new recruits, a big regroup action reached, asking to merge some
companies into one. The designation of a company, however, will not be canceled,
but remain for memorialize what the company is done, means the designation of
the company is still exist, but the company is gone, so it is unable to ask
recruits to join this company, or merge the company into others.
A strange
thing is, the orders sometimes get wrong, send newbie to a company which is
already merged into another, or mentioned some only-designation-existed
companies. Such order could be rejected.
The brigadier wants to know every
change of each order, so the program should able to report the status of every
order, telling whether it is accept, and can query the fighting capacity of
specified company. (To simplify, companies are numbered from 0 to n-1
 
Input
There may be several test cases.
For each case, the
integers in first line, n, k, m, telling that there are n companies, k soldiers
already, and m orders needs be executed. (1<=n ,k ,m<=100000).
Then k
lines with two integers R and C for each, telling a soldier with rate R is now
in company C
Then m lines followed, containing 3 kinds of orders, in upper
case:
  AP x y
A recruit with ability rate x were asked to join company y.
(0<=x<2^31, 0<=y<n)

MG x y
Company x and company y is
merged. The new company is numbered as x. (0<=x, y<n)

GT
x
Report the fighting capacity of company x. (0<=x<n)

 
Output
For each order there is exact one line to report the
result.
For AP and MG order, print “Accept” if it is able to be done, and
execute it, or “Reject” if it is an illegal order.
For GT order, if company x
is still exist (not merged into others), print as “Lowest rate: y.” which y is
the minimal rate of soldiers in this company. If there is no one in this
company, tell "Company x is empty." If company x is already merged into others,
print "Company x is a part of company z." z is the company where the company x
is in.
Print a blank line after each case
 
Sample Input
5 5 10
5 0
5 1
5 2
5 1
5 0
GT 0
GT 3
AP 3 3
GT 3
GT 4
MG 3 4
GT 4
MG 1 3
GT 4
GT 1
 
Sample Output
Lowest rate: 5.
Company 3 is empty.
Accept
Lowest rate: 3.
Company 4 is empty.
Accept
Company 4 is a part of company 3.
Accept
Company 4 is a part of company 1.
Lowest rate: 3.
 
Source
 并查集用于寻找被合并的国家的去向(即合并到哪一个国家去了),
唯一注意一点就是MG的时候可能出现(x==y)的情况,显然此时应该"Reject" 即可,坑爹。
其他的开数组模拟即可。

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int f[100005];
int d[100005];
int fig[100005];
int vis[100005];
int getf(int v){return f[v]==v?v:f[v]=getf(f[v]);}
int main()
{
int n,m,i,j,k,x,y,q,r,c;
char s[30];
while(cin>>n>>k>>q){
memset(d,0,sizeof(d));
memset(fig,inf,sizeof(fig));
for(i=0;i<n;++i) f[i]=i,vis[i]=1;
for(i=1;i<=k;++i){
scanf("%d%d",&r,&c);
fig[c]=min(fig[c],r);
d[c]++;
}
while(q--){
scanf(" %s",s);
if(!strcmp(s,"AP")){ scanf("%d%d",&x,&y);
if(!vis[y]) puts("Reject");
else {
puts("Accept");
d[y]++;
fig[y]=min(fig[y],x);
}
}
else if(!strcmp(s,"MG")){ scanf("%d%d",&x,&y);
if(!vis[x]||!vis[y]||(x==y)) {puts("Reject");continue;}
puts("Accept");
d[x]+=d[y];
d[y]=0;
vis[y]=0;
fig[x]=min(fig[x],fig[y]);
fig[y]=inf;
f[y]=x;
}
else if(!strcmp(s,"GT")){ scanf("%d",&y);
if(vis[y]&&d[y]>0) printf("Lowest rate: %d.\n",fig[y]);
else if(vis[y]&&d[y]==0) printf("Company %d is empty.\n",y);
else if(!vis[y]) printf("Company %d is a part of company %d.\n",y,getf(y));
}
} puts("");
}
return 0;
}

HDU 2860 (模拟+并查集)的更多相关文章

  1. 2019牛客暑期多校训练营(第八场)E:Explorer(LCT裸题 也可用线段树模拟并查集维护连通性)

    题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树.  开始和队友 ...

  2. HDU 2818 (矢量并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2818 题目大意:每次指定一块砖头,移动砖头所在堆到另一堆.查询指定砖头下面有几块砖头. 解题思路: ...

  3. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列

    A. Broken Clock time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  4. hdu 1116 欧拉回路+并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...

  5. Bipartite Graph hdu 5313 bitset 并查集 二分图

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5313 题意: 给出n个顶点,m条边,问最多添加多少条边使之构成一个完全二分图 存储结构: bitset   ...

  6. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. 2015 ACM/ICPC Asia Regional Changchun Online HDU - 5441 (离线+并查集)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给你n,m,k,代表n个城市,m条边,k次查询,每次查询输入一个x,然后让你一个城市对(u,v ...

  8. hdu 3536【并查集】

    hdu 3536 题意: 有N个珠子,第i个珠子初始放在第i个城市.有两种操作: T A B:把A珠子所在城市的所有珠子放到B城市.  Q A:输出A珠子所在城市编号,该城市有多少个珠子,该珠子转移了 ...

  9. HDU 1829 分组并查集

    题意:有两种性别,每组数据表示是男女朋友,判断输入的几组数据是否有同性恋 思路:http://blog.csdn.net/iaccepted/article/details/24304087 分组并查 ...

随机推荐

  1. 过山车---hdu2063(最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063最大匹配模板题: #include <iostream> #include <c ...

  2. 寻找最小(最大)的k个数

    题目描述:输入n个整数,输出其中最小的k个元素. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 思路1:最容易想到的方法:先对这个序列从小到大排序,然后输出前 ...

  3. 【Python】【爬虫】如何学习Python爬虫?

    如何学习Python爬虫[入门篇]? 路人甲 1 年前 想写这么一篇文章,但是知乎社区爬虫大神很多,光是整理他们的答案就够我这篇文章的内容了.对于我个人来说我更喜欢那种非常实用的教程,这种教程对于想直 ...

  4. 存储5——逻辑卷管理LVM

    1. LVM概念 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻辑上 ...

  5. 002-and design-基于dva的基本项目搭建

    一.概述 在真实项目开发中,你可能会需要 Redux 或者 MobX 这样的数据应用框架,Ant Design React 作为一个 UI 库,可以和任何 React 生态圈内的应用框架搭配使用.我们 ...

  6. 如何区分不同用户——Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. jvm之gc日志

    ava GC日志可以通过 +PrintGCDetails开启 以ParallelGC为例 YoungGC日志解释如下 FullGC:

  8. python面向对象编程基础

    演示了 Python 类与对象的编程基础, 包括属性.方法.继承.组合.动态创建类. python 版本: 2.7.5 class SimpleClass(object): ''' a simple ...

  9. table--边框样式设置

    Table的一些设置(自适应以及溢出)   table的两个属性 单行溢出点点显示 表格的宽度设置 双栏自适应连续连续英文符换行 1.table重置的两个属性: ①border-collapse: c ...

  10. 【开源】检查更新程序 CheckUpdate.Net 的实现

    访问最新源代码及更新历史:http://git.oschina.net/xcong/CheckUpdate.Net DownLoad 更新历史 version 1.2 [新增]添加UpdateFile ...