zoukankan      html  css  js  c++  java
  • 最小环

    最小环

    信息传递

    dfs

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    typedef long long ll;
    const int N=200005;
    inline int read() {
    	int x=0,f=1;char ch=getchar();
    	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
    	return f*x;
    }
    int n,ans=0x3f3f3f3f;
    int t[N],in[N];
    int vis[N];
    void dfs(int s,int e,int d) {
    	if(d&&s==e) {
    		ans=min(ans,d);return;
    	}
    	if(!vis[t[e]]) {
    		vis[t[e]]=1;
    		dfs(s,t[e],d+1);
    	}
    }
    void del(int x) {
    	vis[x]=-1;
    	in[t[x]]--;
    	if(!in[t[x]]&&vis[t[x]]!=-1) del(t[x]);
    }
    int main() {
    	n=read();
    	for(int i=1;i<=n;i++) {
    		t[i]=read();
    		in[t[i]]++;
    	}
    	for(int i=1;i<=n;i++)
    		if(!in[i]&&vis[i]!=-1) 
    			del(i);
    	for(int i=1;i<=n;i++)
    		if(!vis[i])
    			dfs(i,i,0);
    	printf("%d
    ",ans);
    	return 0;
    }
    
    
    

    并查集

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=200005;
    int n;
    int f[MAXN];
    int dis[MAXN];
    int ans=0x7fffffff;
    int find(int x)
    {
    	if(f[x]!=x)
    	{
    		int fa=f[x];
    		f[x]=find(f[x]);
    		dis[x]+=dis[fa];
    	}
    	return f[x];
    }
    void check(int x,int y)
    {
    	int u=find(x),v=find(y);
    	if(u!=v)
    	{
    		f[v]=u;
    		dis[y]=dis[x]+1;
    	}
    	else
    	{
    		ans=min(ans,dis[x]+dis[y]+1);
    	}
    	return ;
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++) f[i]=i;
    	for(int i=1;i<=n;i++)
    	{
    		int a;
    		scanf("%d",&a);
    		check(a,i);
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    CDH 重装 kafka 报错,挺常见的错误
    SpringBoot + easyexcel + vue 下载 excel 问题
    第二节 全球金融市场
    第一节 金融市场概述
    第1章-起 步
    第3关-input()函数
    第2关-条件判断与条件嵌套
    风变编程-Python基础语法
    第0关-千寻的名字
    Git知识点记录3-Git基础
  • 原文地址:https://www.cnblogs.com/ke-xin/p/13787052.html
Copyright © 2011-2022 走看看