当前位置: 首页 > news >正文

[noip2015 d1t2] 信息传递

题目链接

题意:给定一个图,每个节点的出度为1,求最小环的结点数

参考:http://www.cnblogs.com/83131yyl/p/5020528.html

可以先把不在环内的点清除掉,再对于每个环跑一遍长度

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 #define maxn 200010
 6 int in_degree[maxn],reach[maxn];
 7 bool vis[maxn];
 8 int n,ans;
 9 int read(){
10     int x=0,f=1;
11     char ch=getchar();
12     while (ch<'0'||ch>'9'){
13         if (ch=='-') f=-1;
14         ch=getchar();
15     }
16     while (ch>='0'&&ch<='9'){
17         x=x*10+ch-'0';
18         ch=getchar();
19     }
20     return x*f;
21 }
22 void Clean(int i){//清除不在环内的结点
23     vis[i]=1;
24     in_degree[reach[i]]--;
25     if (!in_degree[reach[i]]) Clean(reach[i]); 
26 }
27 void dfs(int p,int len){//求环的长度 
28     vis[p]=1;
29     if (!vis[reach[p]]) dfs(reach[p],len+1);
30     else if (len!=1) ans=min(ans,len);
31 }
32 int main(){
33     n=read();
34     memset(reach,0,sizeof(reach));
35     memset(in_degree,0,sizeof(in_degree));
36     memset(vis,0,sizeof(vis));
37     for (int i=1;i<=n;i++){
38         reach[i]=read();
39         in_degree[reach[i]]++;
40     }
41     for (int i=1;i<=n;i++)
42       if (!in_degree[i]&&!vis[i]) Clean(i);//注意两个限制条件,防止重复的删除 
43     ans=n+1;
44     for (int i=1;i<=n;i++)
45       if (!vis[i]) dfs(i,1);
46     ans=ans>n?0:ans;
47     printf("%d\n",ans);
48     return 0;
49 }
View Code

另外常规的解法是用tarjan求强连通分量 留坑

转载于:https://www.cnblogs.com/vincent-hwh/p/7327688.html

相关文章:

  • 【模板】一坨数学算法
  • 单词首字母变大写-vue
  • HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)
  • oracle归档日志增长过快处理方法
  • 对WebSocket技术的学习与探索(二)
  • noip 2016 Day T1 组合数
  • Python装饰器主要用法
  • JMeter学习-004-WEB脚本入门实战
  • JDBC的链接及封装
  • 对于盒模型的宽高获取填坑
  • 普通程序员如何入门AI
  • 技术分享之AQS——内容提要
  • ansible基本使用教程
  • Kafka【第一篇】Kafka集群搭建
  • vue2.0 新手教程(一)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CSS 三角实现
  • java 多线程基础, 我觉得还是有必要看看的
  • Laravel 中的一个后期静态绑定
  • Mac转Windows的拯救指南
  • React+TypeScript入门
  • vue-cli在webpack的配置文件探究
  • WebSocket使用
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 离散点最小(凸)包围边界查找
  • 两列自适应布局方案整理
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 小试R空间处理新库sf
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 应用生命周期终极 DevOps 工具包
  • 原生js练习题---第五课
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #{} 和 ${}区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #pragma pack(1)
  • (7)STL算法之交换赋值
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (vue)页面文件上传获取:action地址
  • (zhuan) 一些RL的文献(及笔记)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超详细)语音信号处理之特征提取
  • (二)正点原子I.MX6ULL u-boot移植
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .Mobi域名介绍
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .Net多线程总结
  • .net中生成excel后调整宽度
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @angular/cli项目构建--Dynamic.Form