zoukankan      html  css  js  c++  java
  • P1726 上白泽慧音

    P1726 上白泽慧音

    缩点的模板。

    因为数据范围很小,所以对于输出方案的判断就可以很水。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector<int>line[5010];
    int dfn[5010],low[5010],tim;
    int belong[5010],cnt;
    int num[5010],Max;
    int stack[100000],top;
    bool insta[5010];
    int n,m;
    void tarjan(int now)
    {
        dfn[now]=low[now]=++tim;
        stack[++top]=now;
        insta[now]=true;
        for(int i=0;i<line[now].size();i++)
        {
            int nxt=line[now][i];
            if(!dfn[nxt])
            {
                tarjan(nxt);
                if(low[nxt]<low[now])
                    low[now]=low[nxt];
            }
            else
                if(insta[nxt]&&dfn[nxt]<low[now])
                    low[now]=dfn[nxt];
        }
        if(dfn[now]==low[now])
        {
            int c=0;
            cnt+=1;
            int pas;
            do
            {
                pas=stack[top--];
                insta[pas]=false;
                belong[pas]=cnt;
                c+=1;
            }while(pas!=now);
            num[cnt]=c;
            if(!Max)
            {
                Max=cnt;
                return ;
            }
            if(num[Max]==num[cnt])
            {
                for(int i=1;i<=n;i++)
                {
                    if(belong[i]==Max)
                        return ;
                    if(belong[i]==cnt)
                    {
                        Max=cnt;
                        return;
                    }
                }
            }
            if(num[Max]<num[cnt])
            {
                Max=cnt;
                return;
            }
        }
        return ;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        int a,b,t;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&t);
            if(t==1)
                line[a].push_back(b);
            else
                line[a].push_back(b),line[b].push_back(a);
        }
        for(int i=1;i<=n;i++)
            if(!belong[i])
                tarjan(i);
        printf("%d
    ",num[Max]);
        for(int i=1;i<=n;i++)
            if(belong[i]==Max)
                printf("%d ",i);
        return 0;
    }
    
  • 相关阅读:
    net事件丢失解决方法
    Google排名经验谈
    动力漏洞
    Understand简明参考
    修复iReaper
    Bootstrap源码分析
    UTF8编码字节流错误小析
    OAuth2学习及DotNetOpenAuth部分源码研究
    DynamicModuleUtility对象在.net不同版本下的兼容性问题
    MediaWiKi简明安装与配置笔记
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/9069358.html
Copyright © 2011-2022 走看看