zoukankan      html  css  js  c++  java
  • sadpairs

    #include<bits/stdc++.h>
    #define il inline
    #define reg register int
    #define numb (ch^'0')
    using namespace std;
    typedef long long ll;
    il void rd(int &x){
        char ch;bool fl=false;
        while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
        for(x=numb;isdigit(ch=getchar());x=x*10+numb);
        (fl==true)&&(x=-x);
    }
    namespace Miracle{
    const int N=4e5+5;
    int n,m;
    struct node{
        int nxt,to;
    }e[2*N];
    int hd[N],cnt;
    void add(int x,int y){
        e[++cnt].nxt=hd[x];
        e[cnt].to=y;
        hd[x]=cnt;
    }
    int dfn[N],low[N],df,dfn2[N];
    int co[N],b[N],dcc;
    vector<int>mem[N];
    ll preno;
    vector<int>be[N];
    int typ[N];//1:yuan 0:fang
    int sta[N],top;
    void tarjan(int x){
        dfn[x]=low[x]=++df;
        sta[++top]=x;
        for(reg i=hd[x];i;i=e[i].nxt){
            int y=e[i].to;
            if(!dfn[y]){
                tarjan(y);
                low[x]=min(low[x],low[y]);
                if(low[y]>=dfn[x]){
                    ++dcc;
                    int z;
                    do{
                        z=sta[top];
                        mem[dcc].push_back(z);
                        --top;
                    }while(z!=y);
                    mem[dcc].push_back(x);
                }
            }else low[x]=min(low[x],dfn[y]);
        }
    }
    void dfs1(int x){
        dfn[x]=++df;
        for(reg i=hd[x];i;i=e[i].nxt){
            int y=e[i].to;
            if(!dfn[y])dfs1(y);
        }
        dfn2[x]=df;
    }
    ll dp[N];
    ll tag[N];
    
    void dfs2(int x){
        
    }
    ll ans[N];
    
    void sol(int x){
        
    }
    int main(){
        rd(n);rd(m);
        int tot=0;
        for(reg i=1;i<=n;++i) rd(co[i]),b[++tot]=co[i];
        sort(b+1,b+tot+1);
        tot=unique(b+1,b+tot+1)-b-1;
        for(reg i=1;i<=n;++i){
            co[i]=lower_bound(b+1,b+tot+1,co[i])-b;
            be[co[i]].push_back(i);
        }
        for(reg i=1;i<=n;++i){
            if(!dfn[i]) tarjan(i);
        }
        memset(hd,0,sizeof hd);
        memset(dfn,0,sizeof dfn);
        df=0;cnt=0;
        int tot=n;
        for(reg i=1;i<=dcc;++i){
            ++tot;
            typ[tot]=0;
            for(reg j=0;j<(int)mem[i].size();++j){
                typ[mem[i][j]]=1;
                add(tot,mem[i][j]);
                add(mem[i][j],tot);
            }
        }
        for(reg i=1;i<=tot;++i){
            if(!dfn[i]){
                dfs1(i);
            }
        }
        
        for(reg i=1;i<=)
    }
    
    }
    signed main(){
        Miracle::main();
        return 0;
    }
    
    /*
       Author: *Miracle*
       Date: 2019/2/19 17:48:21
    */
  • 相关阅读:
    2017/7/26 SCJP英语学习
    JSF(JavaServer Faces)简介
    Java回话技术
    2.2 对象深拷贝、浅复制、序列化
    编码与解码
    pycharm 教程(一)安装和首次使用
    Java Eclipse进行断点调试
    详细介绍如何在Eclipse中使用SVN
    SVN客户端安装与使用
    炸鸡
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10403807.html
Copyright © 2011-2022 走看看