今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹)。

这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话应该也是可以水过部分分的,尧神说这道题咋打都能过,但我不会啊,于是开始了模拟,开了两个动态的数组进行模拟这个过程,一个传个另一个(很傻的做法)但我还是打了,代码量100+,于是轻轻松松过了样例点了提交不知道能过多少,嗯,20分,还行,后面dalao说这道题简单的很,交给我并茶几判环,不会啊,代码量就顶多50+,过了,然后一直看他的代码,记忆性的打出了他的代码理解不了最后在洛谷上找了篇题解,才发现自己没真正理解题目,画了个图知道了真正的找最小环,topsort完以后剩下的就剩环了dfs寻找最小的就行了,也还算简单,深刻理解环。

代码:

#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int maxn=;
int a[maxn],d[maxn],b[maxn],ans=1e8;
int n;
void delet(int x)
{
d[x]=-;
b[a[x]]--;
if(b[a[x]]==&&d[a[x]]!=-)
delet(a[x]);
}
void dfs(int r,int l,int num)
{
if(l==r&&num!=)
{
ans=min(ans,num);
return;
}
if(d[a[r]]==)
{
d[a[r]]=;
dfs(a[r],l,num+); }
}
int main()
{
//freopen("1.in","r",stdin);
n=read();
memset(d,,sizeof(d));
memset(b,,sizeof(b));
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
a[i]=read(),b[a[i]]++;
for(int i=;i<=n;i++)
{
if(b[i]==&&d[i]!=-)
{
delet(i);
}
}
for(int i=;i<=n;i++)
{
if(d[i]==)
dfs(i,i,);
}
printf("%d\n",ans);
return ;
}

闻道玉门犹被遮,应将性命逐轻车。

拓扑_dfs——找最小环的更多相关文章

  1. 【CodeForces】915 D. Almost Acyclic Graph 拓扑排序找环

    [题目]D. Almost Acyclic Graph [题意]给定n个点的有向图(无重边),问能否删除一条边使得全图无环.n<=500,m<=10^5. [算法]拓扑排序 [题解]找到一 ...

  2. G - Pandaland HDU - 6005 (找最小环)

    题目链接:https://cn.vjudge.net/contest/275153#problem/G 具体思路: 我们可以按照暴力的方法进行做 , 我们可以枚举每一条边,将这条边的权值设置为inf, ...

  3. 2015 提高组 信息传递--tarjan找最小环

    P2661 信息传递 题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti​ 的同学. ...

  4. bzoj2938 AC自动机 + 拓扑排序找环

    https://www.lydsy.com/JudgeOnline/problem.php?id=2938 题意:给出N个01病毒序列,询问是否存在一个无限长的串不存在病毒序列 正常来说,想要寻找一个 ...

  5. Codeforces Round #580 (Div. 2)-D. Shortest Cycle(思维建图+dfs找最小环)

    You are given nn integer numbers a1,a2,…,ana1,a2,…,an. Consider graph on nn nodes, in which nodes ii ...

  6. tg2015 信息传递 (洛谷p2661)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  7. hdu6005找带权最小环

    题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1. 解法:枚举每一条边,找到其端点,做最短路.. #include<cstdio> #include<cstr ...

  8. floyd离散,最小环

    Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K& ...

  9. [bzoj 1027][JSOI2007]合金(解析几何+最小环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1027 分析: 首先因为一个合金的和为1,所以考虑2个材料合金能否合成一个需求合金的时候 ...

随机推荐

  1. Python "HTTP Error 403: Forbidden"

    问题: 执行下面的语句时 def set_IPlsit(): url = 'https://www.whatismyip.com/' response = urllib.request.urlopen ...

  2. 1. Oracle安装部署文档

    一. 部署环境步骤 1.1 软件环境 操作系统:CentOS release 6.5oracle安装包:linux.x64_11gR2_database_1of1.zip:linux.x64_11gR ...

  3. PHP代码执行函数总结

    PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳. 常见代码执行函数,如 eval().assert().preg_replace().create ...

  4. Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

  5. Nginx(八)-- 负载均衡

    1.概念 负载均衡 建立在现有的网络结构上,提供一种廉价有效透明的方法来扩大网络设置和服务器的带宽.增加吞吐量.加强网络数据处理能力,以及提供网络的灵活性和可用性. 用得较多的负载均衡器硬件有F5 B ...

  6. Selenium 延时等待

    在 Selenium 中, get() 方法会在网页框架加载结束后结束执行,此时如果获取 page_source ,可能并不是浏览器完全加载完成的页面: 如果某些页面有额外的 Ajax 请求,我们在网 ...

  7. 资源打包Assetbundle .

    在手游的运营过程中,更新资源是比不可少的.资源管理第一步是资源打包.传统的打包可以将所有物件制成预设Prefab,打包成场景.今天我们来一起学习官方推荐的Assetbundle,它是Unity(Pro ...

  8. Kafka producer介绍

    Kafka 0.9版本正式使用Java版本的producer替换了原Scala版本的producer.本文着重讨论新版本producer的设计原理以及基本的使用方法. 新版本Producer 首先明确 ...

  9. linux下c语言获取当前时间

    和时间有关的函数定义在头文件”time.h”中 常用函数: time_t time(time_t *t); 函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起 ...

  10. 层叠样式表css的优先级

    优先级1:外部<内部<行内优先级2:标签选择器<类选择器<ID选择器