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;
    }
    
  • 相关阅读:
    [HEOI2016/TJOI2016]求和——第二类斯特林数
    RMAN备份脚本
    CF724E Goods transportation
    RMAN备份脚本--DataGuard primary
    [CEOI2017]Mousetrap
    healthcheck
    [学习笔记]斯特林数
    database.sql
    HDU 4372 Count the Buildings——第一类斯特林数
    orac
  • 原文地址:https://www.cnblogs.com/ke-xin/p/13787052.html
Copyright © 2011-2022 走看看