Codeforces Gym 101142C:CodeCoder vs TopForces(搜索)
http://codeforces.com/gym/101142/attachments
题意:每个人在TC和CF上分别有两个排名,如果有一个人在任意一个网站上大于另一个人的排名,那么这个人可以打败另外一个人。还有就是如果 B 能打败 A, C 能打败 B,但是 C 直接从排名上看 C 并不能打败 A,但是因为 B -> A 并且 C -> B,所以 C -> B -> A, 即 C 也能(通过打败 B 来)打败 A。
如这个样例: A :5, 5 ,
B :1, 6,
C:2, 2。
因为 B 的 第二个数大于 A 的第二个数,所以 B 能打败 A, C 的第一个分数 大于 B 的第一个分数,所以 C 能打败 B,所以就算 C 的分数都小于 A,也能打败 A。
思路:因为这样的关系,所以开两个数组分别对第一个分数和第二个分数进行排序,如果 Ai-1 < Ai,那么表示 i 一定能打败 i-1, 就对 i -> i-1 连一条有向边,代表 i 能打败的人有 i - 1,然后通过这条边去找所有能打败的人数,就可以了。从分数小的开始DFS,如果找不到比它小的就进行下一个DFS,因为分数小的可以打败 sum 个人,那么分数大的肯定也能打败大于等于 sum 个人。所以用一个标记记录不要找重,每个人只需要找一次,复杂度是O(n)。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define N 100010
struct node
{
int a, b, id;
}x[N], y[N];
int xid[N], yid[N], sum, ans[N];
bool vis[N]; bool cmp1(const node &a, const node &b)
{
if(a.a == b.a) return a.b < b.b;
return a.a < b.a;
} bool cmp2(const node &a, const node &b)
{
if(a.b == b.b) return a.a < b.a;
return a.b < b.b;
} void dfs(int x)
{
vis[x] = true;
sum++;
int idx = xid[x], idy = yid[x];
if(!vis[idx] && xid[idx] != ) dfs(idx);
if(!vis[idy] && yid[idy] != ) dfs(idy);
} int main()
{
freopen("codecoder.in", "r", stdin);
freopen("codecoder.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d%d", &x[i].a, &x[i].b);
x[i].id = i;
y[i] = x[i];
}
memset(xid, , sizeof(xid));
memset(yid, , sizeof(yid));
memset(vis, , sizeof(vis));
sum = ;
sort(x + , x + + n, cmp1);
sort(y + , y + + n, cmp2);
for(int i = ; i <= n; i++) {
if(x[i].a > x[i-].a) xid[x[i].id] = x[i-].id;
if(y[i].b > y[i-].b) yid[y[i].id] = y[i-].id;
}
for(int i = ; i <= n; i++) {
if(!vis[x[i].id]) dfs(x[i].id);
if(!vis[y[i].id]) dfs(y[i].id);
ans[x[i].id] = sum - ;
}
for(int i = ; i <= n; i++) printf("%d\n", ans[i]);
return ;
}
Codeforces Gym 101142C:CodeCoder vs TopForces(搜索)的更多相关文章
- Gym 101142C CodeCoder vs TopForces (搜索)
题意:每个人有2种排名,对于A只要有一种排名高于B,那么A就能赢B,再如果B能赢C,那么A也能赢C,要求输出每个人分别能赢多少个人 析:首先把题意先读对了,然后我们可以建立一个图,先按第一种排名排序, ...
- Gym - 101142C CodeCoder vs TopForces(搜索)
题意:给定n个人在两个网站上的得分,一个人若能在任意一个网站里战胜另一个人,则认为这个人能战胜那个人.问每个人都能战胜多少人. 分析: 1.战胜具有传递性. 例如: 4 5 2 7 3 3 因为第三个 ...
- 【DFS】Gym - 101142C - CodeCoder vs TopForces
就按照题意建出有向图来(n个点,2n-2条边),然后从按随便一个rating排序,从最后一个开始dfs,用vis数组防止重复访问,因为每次之前的肯定能访问之后的(及之后的能访问的),所以不会有重复.就 ...
- C - CodeCoder vs TopForces Gym - 101142C (连通块+思维)
题目链接: C - CodeCoder vs TopForces Gym - 101142C 题目大意:给你n个人的信息,每一个人的信息包括两个.t1和t2.A>B的前提是A的t1和t2至少有一 ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
随机推荐
- ARC机制下组合关系
// // Person.h // 01-autorelease基本概念 // // Created by apple on 14-3-18. // Copyright (c) 2014年 a ...
- Oracle 监听器日志文件过大导致监听异常
Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...
- EBS安装提示libXtst.so.6: cannot open shared object file
$ ./rapidwiz Rapid Install Wizard is validating your file system...... CMDDIR=/app/Stage122/startCD/ ...
- Java基础之创建窗口——使用GridBagLayout管理器(TryGridBagLayout)
控制台程序. java.awt.GridBagLayout管理器比前面介绍的其他布局管理器灵活得多,因此使用起来也比较复杂.基本机制就是在随意的矩形网格中布局组件,但网格的行和列不一定拥有相同的高度和 ...
- windows远程控制ubuntu尝试--未成功
按照百度知道上的步骤一步一步操作,下载xrdp,一切很顺利. 直至出现了,如下的語言: connecting to sesman ip 尝试找到原因第一个原因 第二次的分析解释 至今还没找出原因
- java程序员从笨鸟到菜鸟之(七)一—java数据库操作
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 数据库访问几乎每一个稍微成型的程序都要用到的知识,怎么高效的访问数据库也是我们学习的一个 ...
- j2ee Servlet、Filter、Listener
首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角色,Interceptor是某些MVC框架中的角色,比如Stru ...
- Swift实战-QQ在线音乐(第二版)
此版本使用百度音乐接口,原因是豆瓣接口很多歌曲没办法找到歌词. 此版本添加了歌词的显示.上一曲.下一曲的实现.歌曲列表指明当前歌曲. 下面来看一下实现过程>>> 一.项目准备: 百度 ...
- ACM-ICPC竞赛模板
为了方便打印,不再将代码放到代码编辑器里,祝你好运. ACM-ICPC竞赛模板(1) 1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函 ...
- WOW: 宏
1.常用的宏命令 1.1常用的宏命令 1.释放技能命令 /cast 释放一个或多个技能,可以加入一些条件判断,是最常用的命令 /castsequence 依次释放释放数个技能,同样可以加入一些条件判断 ...