Gym - 101142C CodeCoder vs TopForces(搜索)
题意:给定n个人在两个网站上的得分,一个人若能在任意一个网站里战胜另一个人,则认为这个人能战胜那个人。问每个人都能战胜多少人。
分析:
1、战胜具有传递性。
例如:
4 5
2 7
3 3
因为第三个人能战胜第二个人,第二个人能战胜第一个人,所以虽然第三个人两个分数都比第一个人低,但第三个人能战胜第一个人。
2、按照某个网站的分数排好序,从分数最小的人dfs,经过的人全都标记下来,则若分数较大的人能战胜的人一定大于等于分数较小的人。
原因:假设是按y网站排好序的,(分数由低到高分别id为3, 1, 2, 4)现在研究在y网站中分数最低的人(id为3),若此人在x网站中的分数较高,打败了id为2的人,则由于id为2的人在y网站一定能打败id为1和id为3的人,所以,3,1,2都被标记下来,而且打败的人数是相同的,因为标记过不会再遍历,所以不用担心将自身计入战胜的人中。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define lowbit(x) (x & (-x))
const double eps = 1e-8;
inline int dcmp(double a, double b){
if(fabs(a - b) < eps) return 0;
return a > b ? 1 : -1;
}
typedef long long LL;
typedef unsigned long long ULL;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const int MAXN = 100000 + 10;
const int MAXT = 10000 + 10;
using namespace std;
struct Node{
int x, y, id;
void read(){
scanf("%d%d", &x, &y);
}
}num[MAXN];
vector<int> v[MAXN];
bool cmp1(const Node& a, const Node& b){
return a.x < b.x;
}
bool cmp2(const Node& a, const Node& b){
return a.y < b.y;
}
int cnt;
int ans[MAXN], vis[MAXN];
void dfs(int cur){
vis[cur] = 1;
++cnt;
for(int i = 0; i < v[cur].size(); ++i){
int t = v[cur][i];
if(vis[t]) continue;
dfs(t);
}
}
int main(){
freopen("codecoder.in", "r", stdin);
freopen("codecoder.out", "w", stdout);
int N;
scanf("%d", &N);
for(int i = 1; i <= N; ++i){
num[i].read();
num[i].id = i;
}
sort(num + 1, num + 1 + N, cmp1);
for(int i = 2; i <= N; ++i){
v[num[i].id].push_back(num[i - 1].id);
}
sort(num + 1, num + 1 + N, cmp2);
for(int i = 2; i <= N; ++i){
v[num[i].id].push_back(num[i - 1].id);
}
for(int i = 1; i <= N; ++i){
int t = num[i].id;
if(!vis[t]) dfs(t);
ans[t] = cnt - 1;
}
for(int i = 1; i <= N; ++i){
printf("%d\n", ans[i]);
}
return 0;
}
Gym - 101142C CodeCoder vs TopForces(搜索)的更多相关文章
- Gym 101142C CodeCoder vs TopForces (搜索)
题意:每个人有2种排名,对于A只要有一种排名高于B,那么A就能赢B,再如果B能赢C,那么A也能赢C,要求输出每个人分别能赢多少个人 析:首先把题意先读对了,然后我们可以建立一个图,先按第一种排名排序, ...
- 【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 101142C:CodeCoder vs TopForces(搜索)
http://codeforces.com/gym/101142/attachments 题意:每个人在TC和CF上分别有两个排名,如果有一个人在任意一个网站上大于另一个人的排名,那么这个人可以打败另 ...
- Gym 101142C :CodeCoder vs TopForces(强连通算法)
题意:N个人,每个人有a属性和b属性,如果一个人的a或者b大于另外一个人,我们说这个人可以打败那个人.且这种关系可以传递.对于每个人,输出他可以打败多少人.(保证每个a不相同,保证每个b不相同. 思路 ...
- Codeforces Gym 101142 C. CodeCoder vs TopForces(思维+图论)
题意: 每个人有两个积分CC和TF 第i个人能战胜第j个人的条件满足下面两个条件中的一个即可 1.CCi > CCj 或 TFi > TFj 2.i能战胜k,k能战胜j. 题解: 先按CC ...
- Gym - 100625J Jailbreak 最短路+搜索
http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...
- GYM 101933E(记忆化搜索)
用每个人的血量作为状态去搜索T飞,考虑题解中更好的搜索方式:每种血量有多少个人作为状态.这样会减去很多重复的状态,因为只要乘一下就得到了所有相同情况的和. 虽然我不会算,但是直观感受起来复杂度比较优秀 ...
- Loppinha, the boy who likes sopinha Gym - 101875E (dp,记忆化搜索)
https://vjudge.net/contest/299302#problem/E 题意:给出一个01 0101串,然后能量计算是连续的1就按1, 2, 3的能量加起来.然后给出起始的能量,求最少 ...
随机推荐
- WireShark 之抓包QQ协议
- 第1节 HUE:14、15、16、hue与hdfs、yarn集群、hive、impala、mysql的整合
3.hue与其他框架的集成 3.1.hue与hadoop的HDFS以及yarn集成 第一步:更改所有hadoop节点的core-site.xml配置 记得更改完core-site.xml之后一定要重启 ...
- 第1节 IMPALA:7、impala的安装以及配置过程
6.制作本地yum源 镜像源是centos当中下载相关软件的地址,我们可以通过制作我们自己的镜像源指定我们去哪里下载impala的rpm包,这里我们使用httpd这个软件来作为服务端,启动httpd的 ...
- 变相降价的iPhone,能挽救苹果在中国的命运吗?
人无千日好,花无百样红.当年iPhone的横空出世不仅开辟了智能手机时代,还间接导致了诺基亚.黑莓等手机品牌的没落.十余年来,苹果凭借iPhone活得风光无限,并成为全球首个市值超万亿美元的公司.但进 ...
- Linux下如何查找sqlnet.ora 和listener.ora 和tnsnames.ora 配置文件的目录
1.首先切换到oracle 用户下 使用env 查看数据库配置文件信息 2.然后找到LD_LIBRARY_PATH=/home/opt/oracle/product/11.2.0.4/db_1 (配置 ...
- SQL*Loader-128: SQL*Loader-523
错误原因: SQL*Loader-128: unable to begin a sessionORA-01017: invalid username/password; logon denied 解决 ...
- SQL添加列、非空、默认值
use MarcoBarcode go alter table [dbo].[WorkOrderRepairSheet] ADD needRepair int go ALTER TABLE [dbo] ...
- C++(五)构造函数
//构造函数的作用:就是在函数被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态//例如在构造一个clock类对象的时候,将初始的时间设定为0:0:0//构造函数的名必须与类名相同,不能定 ...
- JS - 查找字符串中的某个值,截取其之前。和之后的值
var str = "11:222"; /* * 截取 “ :”之前和之后的值 */document.write(str.split(':')[0]) //输出11doc ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-share
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...