拓扑_dfs——找最小环
今天在题库发现了一个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——找最小环的更多相关文章
- 【CodeForces】915 D. Almost Acyclic Graph 拓扑排序找环
[题目]D. Almost Acyclic Graph [题意]给定n个点的有向图(无重边),问能否删除一条边使得全图无环.n<=500,m<=10^5. [算法]拓扑排序 [题解]找到一 ...
- G - Pandaland HDU - 6005 (找最小环)
题目链接:https://cn.vjudge.net/contest/275153#problem/G 具体思路: 我们可以按照暴力的方法进行做 , 我们可以枚举每一条边,将这条边的权值设置为inf, ...
- 2015 提高组 信息传递--tarjan找最小环
P2661 信息传递 题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti 的同学. ...
- bzoj2938 AC自动机 + 拓扑排序找环
https://www.lydsy.com/JudgeOnline/problem.php?id=2938 题意:给出N个01病毒序列,询问是否存在一个无限长的串不存在病毒序列 正常来说,想要寻找一个 ...
- 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 ...
- tg2015 信息传递 (洛谷p2661)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- hdu6005找带权最小环
题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1. 解法:枚举每一条边,找到其端点,做最短路.. #include<cstdio> #include<cstr ...
- floyd离散,最小环
Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K& ...
- [bzoj 1027][JSOI2007]合金(解析几何+最小环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1027 分析: 首先因为一个合金的和为1,所以考虑2个材料合金能否合成一个需求合金的时候 ...
随机推荐
- 【RF库Collections测试】List Should Not Contain Duplicates
Name:List Should Not Contain DuplicatesSource:Collections <test library>Arguments:[ list_ | ms ...
- 如何在LSI MegaRAID BIOS里设定RAID 10与Hot Spare
1. 同时按下 ”Ctrl + H” 进入MegaRAID WebBIOS 画面,可以看到所有物理硬盘 (Physical Drives) 的信息.请在左边视窗点选“Configuration Wiz ...
- javascript使用jQuery加载CSV文件+ajax关闭异步
<script src="jquery-3.3.1.min.js"></script>定义一个csv函数// 关闭异步,否则cesium初始化的时候,csv ...
- VS无法导航到插入点F12失败
关闭VS 开启控制台并导航到Visual安装文件夹,例如C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ID ...
- iOS - Share Extension
1. 学 Share Extension 之前 先了解一下iOS的App Extension 2.1 创建Share Extension扩展Target ** 注:扩展不能单独创建,必须依赖于应用工程 ...
- 链表一元多项式计算器的实现(Java语言描述)
链表的经典应用,程序在多项式相加同类项合并还有小的瑕疵,有待改进. 代码如下: package 一元多项式计算器; public class PolyNode { private double a; ...
- OAuth网络协议(转)
一.应用场景 为了理解OAuth的适用场合,让我举一个假设的例子. 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用该服务,必须让"云冲 ...
- swagger环境搭建
下面所用工具下载 http://editor.swagger.io/#/ demo 一.安装 swagger editor 说明:安装swagger前需要安装node工具 工具安装 ...
- Android 验证APK是否已经签名或是否是Debug签名
https://source.android.google.cn/ http://www.android-doc.com/tools/publishing/app-signing.html Signi ...
- ubuntu 14.04 LTS 右键菜单解压压缩包时出错
先卸载rar sudo apt-get remove rar 再安装unrar sudo apt-get install unrar