zoukankan      html  css  js  c++  java
  • Codeforces

    题意:

      以每个点为起点,找到第一个出现两次的点

    解析:

      我是先找出来所有的环  环上的点找出来的肯定是自己 bz[i]  = i;

    然后去遍历不在环上的点j  如果通过这个点找到一个已经标记的的点i  那么bz[j] = bz[i];

    行吧。。。其实直接暴力 就几行代码。。。真是的。。。过分。。。。我真是垃圾啊。。啦啦啦。。。呸。。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010, INF = 0x7fffffff;
    vector<int> G[maxn];
    vector<int> f;
    int vis[maxn], bz[maxn], a[maxn];
    int s, t, tmp;
    void dfs1(int u)
    {
        vis[u] = 1;
        for(int i=0; i<G[u].size(); i++)
        {
            int v = G[u][i];
            if(!vis[v])
                dfs1(v);
            else if(u != v)
            {
                s = v;        
                tmp = u;
                return;
            }
            else
            {
                bz[v] = v;
                return;
            }
        }
        if(u == s)
            t = tmp;
    }
    
    void dfs2(int u)
    {
        bz[u] = u;
        if(u == t) return;
        for(int i=0; i<G[u].size(); i++)
            dfs2(G[u][i]);
    }
    
    int dfs3(int u)
    {
        if(bz[u]) return bz[u];
        for(int i=0; i<G[u].size(); i++)
            return dfs3(G[u][i]);
    }
    
    
    int main()
    {
        int n, v;
        cin>> n;
        for(int i=1; i<=n; i++)
        {
            cin>> a[i];
            G[i].push_back(a[i]);
        }
        for(int i=1; i<=n; i++)
            if(!vis[i])
            {
                s = t = tmp = INF;
                dfs1(i);
                if(s != INF && t != INF)        
                    dfs2(s);
            }
        for(int i=1; i<=n; i++)
        {
            if(bz[i]) continue;
            else
                bz[i] = dfs3(i);
        }
        for(int i=1; i<=n; i++)
            cout<< bz[i] << " ";
        cout<<endl;
        
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    家庭记账本教程之增(java web基础版三)
    家庭记账本小程序之后台java代码部分(java web基础版二)
    家庭记账本小程序之前端页面设计(java web基础版一)
    面向对象
    装饰器详解
    Python开发【第六篇】:文件处理
    Python开发【第四篇】:运算符
    Python开发【第三篇】:分支循环
    Python开发【第五篇】:函数
    Atom 基本使用
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9623066.html
Copyright © 2011-2022 走看看