链接:https://www.nowcoder.com/acm/contest/152/B
来源:牛客网

题目描述

点点现在有n个软件包。他想设计一个软件包管理器。不可避免地,他要解决软件包之间的依赖问题。
    一开始这些软件包之间没有依赖关系。但是每次点点会添加一条依赖关系a,b,表示软件包a依赖b。当这些软件包的依赖关系没有环的时候,那么这个软件包的管理器是好的,否则就是不好的。
    环的定义如下:
    对于任意k(k≥2)个软件包{a1,a2,...,ak},若对于所有的i<k满足ai依赖ai+1,且a1=ak成立,则这k个软件包构成一个环。
    点点想让你回答他每次加入一条依赖关系之后这个软件包是不是好的,如果是好的那么输出1,否则输出0。同时,点点希望他在加入每一条关系之后你都能回答他,所以他会在读入中对数据进行加密。你只有回答了问题才能知道下一条依赖关系是什么。

输入描述:

第一行两个正整数n,m (1≤n≤100,000, 1≤m≤200,000),表示软件包的个数和操作个数。软件包的标号为1到n。
接下来m行,每行两个正整数u’, v’,表示加密后的依赖关系,保证u’≠v’。如果上一个回答为ans,实际的依赖关系为u, v,那么u’=(u+ans) mod n+1, v’=(v+ans) mod n+1。一开始的ans为0。

输出描述:

输出m行,每行一个数0或1,表示加入了一条依赖关系之后的回答。

题意:一张有向图,一条边一条边的加,问什么时候开始出现环

二分即可,强制在线是假的

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef struct
{int x, y;
}Res;
Res s[200005];
vector<int> G[100005];
int n, m, ok, vis[100005];
int P(int x)
{x -= 2;if(x==0)x = n;else if(x==-1)x = n-1;return x;
}
void Sech(int x)
{int i, v;vis[x] = 1;for(i=0;i<G[x].size();i++){v = G[x][i];if(vis[v]==2)continue;if(vis[v]==1){ok = 1;continue;}Sech(v);}vis[x] = 2;
}
int Jud(int x)
{int i;G[s[1].x-1].push_back(s[1].y-1);for(i=2;i<=x;i++)G[P(s[i].x)].push_back(P(s[i].y));for(i=1;i<=n;i++)vis[i] = 0;ok = 0;for(i=1;i<=n;i++){if(vis[i]==0)Sech(i);}for(i=1;i<=n;i++)G[i].clear();return ok;
}
int main(void)
{int i, l, r, mid;scanf("%d%d", &n, &m);for(i=1;i<=m;i++)scanf("%d%d", &s[i].x, &s[i].y);l = 1, r = m;while(l<r){mid = (l+r+1)/2;if(Jud(mid))r = mid-1;elsel = mid;}for(i=1;i<=r;i++)printf("1\n");for(;i<=m;i++)printf("0\n");return 0;
}

2018 CodeM复赛:B. 软件包管理器(二分)相关推荐

  1. helm部署仓库中没有的包_Kubernetes的Helm软件包管理器简介

    helm部署仓库中没有的包 Before we dive into the Helm package manager, I'm going to explain some key concepts t ...

  2. BZOJ4196:[NOI2015]软件包管理器——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4196 https://www.luogu.org/problemnew/show/P2146 你决定 ...

  3. Linux学习笔记重新梳理20180702 之 yum软件包管理器

    2019独角兽企业重金招聘Python工程师标准>>> Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中 ...

  4. BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

  5. 微软开源 Windows 软件包管理器 winget,一行命令安装软件

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 来源 | https://www.oschin ...

  6. 【NOI2015】软件包管理器

    NOI难得的水题,话说还是T2诶--又学到了线段树的一种新的魔性使用 看sxysxy大神的代码才写出来的,sxysxy_orz 原题: Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包 ...

  7. bzoj4196:[Noi2015]软件包管理器

    Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  8. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解

    yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...

  9. Mac OS 软件包管理器Homebrew

    前言 当我们在 Mac os 下安装软件的时候,常常会因为缺失依赖包而不得不停止,这时候通常的做法就是在网上下载各种依赖包来进行一一的安装,这种操作难免会有些复杂了,并且很浪费时间.那么今天要讲的是一 ...

最新文章

  1. RapidJSON简介及使用
  2. 用上GAN的推荐算法成精了,看完视频马上刷出相关文章丨KDD 2021
  3. 马化腾和扎克伯格,为什么抢着押注元宇宙?
  4. pptx和ppt计算机二级,计算机二级Ms office考试PPT考点总结.pptx
  5. hadoop 分片与分块,map task和reduce task的理解
  6. Go语言sync包的Pool和Cond
  7. [原创] IAR7.10安装注册教程
  8. syslog收到的日志存放在哪里_【Python】Syslog日志服务器开发amp;部署(12.5更新)
  9. IOS 在终端( Terminal )开发
  10. QT学习之自定义信号
  11. html input文字缩进,使用HTML Tidy来缩进HTML代码?
  12. hdu 6080-度度熊保护村庄
  13. python 126邮箱发送邮件
  14. “换个江湖再见”阿里巴巴20周年年会直击:岁月很暖,未来很酷。
  15. 程序员应该如何对待面试?
  16. java自行车北京_JAVA公共自行车地图api调用代码实例
  17. iis服务器文件上传大小限制,如何解决IIS默认的最大上传文件的限制?
  18. LC.1175. Prime Arrangements
  19. STM32CubeMX-SPI+DMA 驱动 2812 灯带
  20. python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...

热门文章

  1. python工资这么高为什么不学-为什么Python岗位薪资越来越高
  2. python和java哪个好-Python和Java哪个好?有什么区别?
  3. python计算工资编程-老男孩学Python编程后薪资待遇高吗?
  4. python和java学哪个好-Python和Java学哪个好就业?
  5. python基础知识-Python语言基础知识总结
  6. 无声也能语音识别?微软这个黑科技有点厉害
  7. c语言中eles后面分号的作用,C语言 if else 语句详细讲解
  8. 【二分法】计蒜客:对数方程
  9. Helix Streaming Server 简单配置
  10. Helm 3 完整教程(二十四):创建和使用子 chart