最小环问题之信息传递

首先定一个小小的目标,一个学期肝完计蒜客上所有的题目..
这是第一道题目 [题目链接]

最小环问题之信息传递_第1张图片

最小环问题之信息传递_第2张图片
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=200005;
int input[maxn]; //record input
int record[maxn]= {}; //记录多少个数指向他
int  note[maxn]= {}; //标记是否剔除
queueoutman;
int n,ans=0;

void inputs()
{
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>input[i];
        record[input[i]]++;
    }
    ans=n;
}

int main()
{
    inputs();
    //第一步先剔除最开始的
    for(int i=1; i<=n; i++)
    {
        if(record[i]==0)
        {
            outman.push(i);
            note[i]=1;
        }
    }
    //继续剔除
    int x;
    while(!outman.empty())
    {
        x=outman.front();
        outman.pop();
        record[input[x]]--;
        if(record[input[x]]==0)
        {
            note[input[x]]=1;
            outman.push(input[x]);
        }
    }
    //接下来找最小环
    int sum,point;
    for(int i=1; i<=n; i++)
    {
        if(note[i]==0&&record[i]!=0)
        {
            sum=1;
            point=input[i];
            note[i]=1;
            while(note[point]==0)
            {
                note[point]=1;
                point=input[point];
                sum++;
            }
            if(sum

明天再更,现在睡觉(滑稽)

你可能感兴趣的:(最小环问题之信息传递)