题目大意:

n个人参加竞技比赛。比赛由三种模式a,b,c,每个人在每种模式下有对应的权值a[i]b[i]c[i]。举行n−1场比赛,每场比赛主办方可以选择两个人决斗,能力值低的人淘汰。这样保证n-1场比赛过后,只会有一个winner。q 个询问,询问第x个人,问主办方有没有一种方式可以使他成为winner。(n=1e5,q=1e5)

解题报告:

wjh大佬写的贪心也能过,但是这题正解是缩点。其实任意一种模式都是无关紧要的,只要有一种属性x比y大,则可以连边x->y。而且对于所有比y小的元素你只需要和比他小的最大的那个元素连边就可以了,因为战胜的关系是具有传递性的,所以不需要都连边,也不能和任意一个比他小的元素连边,然后缩点,对于每一个大点,如果入度为0那就是可以成为冠军的点。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
struct Node {int a,b,c;int id;
} R[MAX];
bool cmp1(Node a,Node b) { return a.a < b.a; }
bool cmp2(Node a,Node b) { return a.b < b.b; }
bool cmp3(Node a,Node b) { return a.c < b.c; }
int n,q;
vector<int> vv[MAX];
int DFN[MAX],LOW[MAX],stk[MAX],vis[MAX],clk,Index,scc,col[MAX];
int in[MAX],ans[MAX];
void tarjan(int x) {DFN[x] = LOW[x] = ++clk;stk[++Index] = x;vis[x] = 1;for(int i = 0; i<vv[x].size(); i++) {int v = vv[x][i];if(!DFN[v]) {tarjan(v);LOW[x] = min(LOW[x],LOW[v]);}else if(vis[v]) LOW[x] = min(LOW[x],DFN[v]);}if(LOW[x] == DFN[x]) {scc++;while(1) {int tmp = stk[Index--];vis[tmp] = 0;col[tmp] = scc;if(tmp == x) break;           }       }
}
int main()
{cin>>n>>q;for(int i = 1; i<=n; i++) scanf("%d",&R[i].a),R[i].id = i;for(int i = 1; i<=n; i++) scanf("%d",&R[i].b);for(int i = 1; i<=n; i++) scanf("%d",&R[i].c);sort(R+1,R+n+1,cmp1);for(int i = 2; i<=n; i++) vv[R[i].id].pb(R[i-1].id);sort(R+1,R+n+1,cmp2);for(int i = 2; i<=n; i++) vv[R[i].id].pb(R[i-1].id);sort(R+1,R+n+1,cmp3);for(int i = 2; i<=n; i++) vv[R[i].id].pb(R[i-1].id);for(int i = 1; i<=n; i++) if(!DFN[i]) tarjan(i);for(int u = 1; u<=n; u++) {for(int j = 0; j<vv[u].size(); j++){int v = vv[u][j];if(col[u] != col[v]) in[col[v]]++;}}while(q--) {int x; scanf("%d",&x);if(in[col[x]] == 0) printf("YES\n");else printf("NO\n");}return 0 ;
}

【2019南昌邀请赛现场赛 - G】Winner(建图,tarjan缩点 或 贪心)相关推荐

  1. 【2019南昌邀请赛现场赛 - G】Winner(思维、图论+缩点)

    题目链接: https://nanti.jisuanke.com/t/40259" Ichuan really likes to play games, so he organized a ...

  2. 【2019南昌邀请赛现场赛 - J】Prefix(STLmap,思维)

    题干: yah has n strings <s1​,⋯,sn​>, and he generates a sequence P by two steps: P=<s1​,⋯,sn​ ...

  3. 【计蒜客 - 2019南昌邀请赛网络赛 - K】MORE XOR(数学,找规律,打表)

    Given a sequence of nn numbers a_1, a_2, \cdots, a_na1​,a2​,⋯,an​ and three functions. Define a func ...

  4. 南昌邀请赛网络赛 G. tsy's number(莫比乌斯反演+线性筛)

    题目链接: tsy's number 题意: 求    (mod ) 思路: 原式 =  设   设  原式 =  设T = id ,将 i 的求和变为 T 的求和: 原式 =   :这个是 与  的 ...

  5. 【计蒜客 - 2019南昌邀请赛网络赛 - I】Max answer(单调栈,RMQ)

    题干: Alice has a magic array. She suggests that the value of a interval is equal to the sum of the va ...

  6. 【计蒜客 - 2019南昌邀请赛网络赛 - H】Coloring Game(找规律,思维dp)

    题干: David has a white board with 2 \times N2×N grids.He decides to paint some grids black with his b ...

  7. 【计蒜客 - 2019南昌邀请赛网络赛 - M】Subsequence(字典树,dp预处理)

    题干: Give a string SS and NN string T_iTi​ , determine whether T_iTi​ is a subsequence of SS. If ti i ...

  8. 2019南昌邀请赛网络赛

      A. PERFECT NUMBER PROBLEM 这题没什么要说的. #include<bits/stdc++.h>using namespace std;int main(){co ...

  9. 2019南昌邀请赛游记

    第9场,湘潭西安都有遗憾,这次没啥遗憾就是菜,挂机两个半小时. 周五下午翘课火车到南昌,天啊江西师范旁边的路好宽,还有地铁商场电影院这生活也太滋润了,到哪比赛就想转学到哪系列,晚上快乐烧烤,可以排进吃 ...

最新文章

  1. Ubuntu下使用Anaconda安装opencv 解决无法读取视频
  2. NODEJS项目实践0.4 [domain,pm2,log4js,md5]
  3. Windows线程同步机制的区别与比较及进程通信方法
  4. 富士通服务器安装操作系统,富士通平板u盘安装系统教程
  5. 测试lazy_enable_if的所有变体
  6. Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI
  7. android中的xml布局文件如何引用另一个xml布局文件,引用另一个layout.xml文件而不复制它...
  8. json数据格式分析
  9. 用最简单的道理说服别人,提升自己
  10. 解锁lintcode数字图像识别
  11. navicat produsts注册机出现Generate First a serial
  12. 【漫画】分享16张程序员高端漫画~
  13. logstash 日志_面试和书评:LogStash书,使日志管理变得容易
  14. Markdown Cheat Sheet
  15. SATA系列专题之六:浅析NCQ原生指令序列
  16. xutils找id空指针_xutils3上传图片
  17. 一款刷题利器,绝了!
  18. 2015年省赛第六届蓝桥杯B组C/C++第二题解 星系炸弹
  19. sql 每小时的温度平均值
  20. Feign基本用法-Feign

热门文章

  1. 用多媒体库 Bass.dll 播放 mp3 [15] - 设置与获取播放速度
  2. [BUGKU][CTF][Reverse][2020] Reverse writeup 1-7 暂时肝不动了
  3. [Leedcode][JAVA][第139题][单词拆分][递归][记忆优化][动态规划]
  4. 力扣3. 无重复字符的最长子串 two pointer算法|滑动窗口|尺取法
  5. 同名字的数值求和插入行_EXCEL条件求和的6种技术,你会的超过3种吗?
  6. vant实现下拉刷新和上拉加载_微信小程序 - 实现下拉刷新、上拉加载
  7. windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...
  8. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  9. matlab 条形图横坐标,Matlab条形图bar横坐标间距设置
  10. pin controller driver代码分析