【题目描述】

Applese 有一个QQ群。在这个群中,大家互相请教问题。如 b 向 a 请教过问题,就把 a 叫做是 b 的"老板"。这样一个群中就会有很多老板。

同时规定:如果 a 是 b 的老板,b 是 c 的老板,那么 a 也是 c 的老板。

为了不破坏群里面和谐交流的氛围,Applese 定了一个群规:不允许出现 a 既是 b 的老板, b 又是 a 的老板。

你需要帮助 Applese 判断大家是否遵守了群规。

【输入描述】

第一行两个整数 n, m,表示群里的人数以及请教问题的数量。
接下来 m 行,每行两个整数 a, b,表示 a 是 b 的"老板",即 b 向 a 请教了一个问题。
注:无论是否违反了群规,a 都会成为 b 的老板。

1≤n≤105
1≤m≤2⋅105
1≤a,b≤n

【输出描述】

对于每次提问,输出一行"Yes"表示大家都遵守了群规,反之输出"No"。

【样例】

示例1

输入
4 4
1 2
2 3
3 1
1 4
输出
Yes
Yes
No
No

思路:

根据题意可以知道,输出一定是若干个 Yes 后跟着若干个 No,而题目实质是要判断有向图是否存在环,由于题目要求在第一个出现环的位置开始输出 No,由于每次都要判环一定会 TLE,无法进行在线操作,因此可以先将所有的数据读入,通过二分来判断最后一个 Yes 的位置来确定何时开始输出 No

【源代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define INF 0x3f3f3f3f
#define N 100001
#define LL long long
const int MOD=1e9+7;
using namespace std;
struct Node{int x;int num;Node(){}Node(int x,int num):x(x),num(num){}
};
vector<Node> edge[N];
int vis[N];
int n,m;
bool dfs(int x,int num){if(vis[x]==1)//出环return true;if(vis[x]==-1)//已访问return false;vis[x]=1;//正在被占用for(int i=0;i<edge[x].size();i++)if(edge[x][i].num<=num&&dfs(edge[x][i].x,num))return true;vis[x]=-1;//解除占用并标记访问return false;}bool judge(int num){memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)if(!vis[i]&&dfs(i,num))return false;return true;
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;edge[x].push_back(Node(y,i));}int pos=1;int left=1,right=m;while(left<=right){int mid=left+right>>1;if(judge(mid)){left=mid+1;pos=mid;}elseright=mid-1;}for(int i=1;i<=pos;i++)cout<<"Yes"<<endl;for(int i=pos+1;i<=m;i++)cout<<"No"<<endl;return 0;
}

Applese 的 QQ 群相关推荐

  1. Applese 的QQ群--(判断图是否成环)

    链接:https://ac.nowcoder.com/acm/contest/330/F 来源:牛客网 Applese 的QQ群 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...

  2. 【牛客 - 330F】Applese 的QQ群(拓扑排序,二分)

    题干: Applese 有一个QQ群.在这个群中,大家互相请教问题.如 b 向 a 请教过问题,就把 a 叫做是 b 的"老板".这样一个群中就会有很多老板. 同时规定:如果 a ...

  3. Applese 的QQ群(二分+dfs)

    链接:https://ac.nowcoder.com/acm/contest/330/F 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言5242 ...

  4. Applese 的QQ群

    https://ac.nowcoder.com/acm/contest/330/F C++版本一 题解: std 图论,二分,拓扑排序 题意是想让大家判断有向图是否存在环.判断有向图是否有环可以使用拓 ...

  5. QQ群功能设计与心理学

    2019独角兽企业重金招聘Python工程师标准>>> 刚刚在一个Java技术交流群,发了个 "博客投票"的广告. 群主两眼一黑,瞬间就把我给干掉了. 看到QQ给 ...

  6. 关于QQ群共享一百多K以上的文件上传失败的问题

    关于QQ群共享一百多K文件以下能上传,一百多K以上的文件总是上传失败的问题,我纠结了很久,今天无意中把我的杀毒软件的防护控制给关掉,结果真上传上去了,不管多大的文件,希望能给同样遇到这个问题的朋友带来 ...

  7. 电子病历、HL7交流QQ群:14739311欢迎一起交流

    HC3i中国数字医疗论坛交流QQ群:14739311  欢迎加入,主要面向关注:医疗信息化.电子病历.PACS.HIS.区域医疗.HL7.医疗解决方案案例.医疗论文的网友 本文来自: HC3i数字医疗 ...

  8. QQ群管理员无法进行成员管理问题的解决

    一.问题的提出   连续几天都无法对QQ群内人员进行管理.在进入"成员管理"项目的时候系统总是提示:"无法取得群信息,连接服务器超时或者无响应,请重试".这样就 ...

  9. C# 获取QQ群数据的实现

    一,分析 1,群数据获取 当访问http://qun.qq.com/air/#mygroup我们通过Fiddler可以查看到QQ群列表是从http://qun.qq.com/air/group/min ...

最新文章

  1. pb 如何导出csv_Firefox火狐浏览器将提供导出密码至本地的功能
  2. C++函数中返回引用和返回值的区别
  3. getimg()在java中,java – 使用getClass()加载资源getResource()
  4. java期末考试2013及答案_java笔试经典(题及答案)2013.doc
  5. MySQL5.7 安装(win)
  6. java如何把方法封装成接口,RxJava配合Retrofit实现网络封装
  7. Adopt Open JDK官方文档(八)OpenJDK 项目介绍
  8. 交换机的VLAN技术
  9. eigen 矩阵求逆_「伴随矩阵」Eigen库 矩阵基本操作:转置矩阵,逆矩阵,伴随矩阵,特征值 - seo实验室...
  10. 从前慢-深入理解JVM-篇章1
  11. 使用Vue+Bootstrap开发在线音乐网站
  12. 云服务器搭建深度学习环境
  13. uni-app ios 苹果真机或安卓机运行
  14. 亚马逊平台还收费吗?收费多少?
  15. HTTP网页从请求到响应过程详解
  16. 走近“领域特定语言”
  17. markdown语法及公式编辑
  18. 五线谱基础教程视频乐理基础
  19. 20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?
  20. POJ 3349 Snowflake Snow Snowflakes hash

热门文章

  1. 什么是气泡图?怎样用Python绘制?怎么用?终于有人讲明白了
  2. 4本数据库新书,大神都在追着看
  3. dsp广告和信息流广告区别_360展示广告与其他信息流平台的区别
  4. 周鸿祎评互联网大佬的编程能力:我能排前三
  5. Linux 29岁,你不知道的29个重大事件
  6. 一不小心就踩坑的fail-fast是个什么鬼?
  7. Mysql查询优化——中间表方法优化count()统计大数据量总数问题
  8. Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台
  9. CDP客户数据管理平台体系化搭建
  10. 编程体系结构(08):Spring.Mvc.Boot框架