zoukankan      html  css  js  c++  java
  • bzoj1242(弦图判定)

    cdqppt地址:https://wenku.baidu.com/view/a2bf4ad9ad51f01dc281f1df.html;

    代码实现参考的http://blog.csdn.net/u014609452/article/details/51447533;

    这个代码实现还是很妙的,为了快速找到label值最大的节点,新建虚拟节点n+1+i,连向所有label等于i的点;

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=1005,maxm=5000005;
    struct edg{
        int to,nxt;
    }e[maxm];
    int f[maxn],best,n,m,last[maxn<<1],t,vis[maxn],seq[maxn];
    void add(int x,int y){++t;e[t].nxt=last[x];last[x]=t;e[t].to=y;}
    void mcs(){
        for(int i=1;i<=n;++i)
        add(n+1,i);
        for(int s=n;s;--s){
            while(1){
                int v=0;
                for(int i=last[n+1+best];i&&!v;i=e[i].nxt){
                    if(!vis[e[i].to]){
                        v=e[i].to;
                    }
                    else
                    last[best+n+1]=e[i].nxt;
                }
                if(v){
                    vis[v]=1;seq[s]=v;
                    for(int i=last[v];i;i=e[i].nxt)
                    if(!vis[e[i].to]){
                        f[e[i].to]++;
                        add(f[e[i].to]+n+1,e[i].to);
                        best=max(best,f[e[i].to]);
                    }
                    break;
                }
                else best--;
            }
        }
    }
    bool can[maxn][maxn];
    int rk[maxn],x,y,cnt,tmp[maxn];
    int main(){
        cin>>n>>m;
        for(int i=1;i<=m;++i){
            scanf("%d%d",&x,&y);
            add(x,y);add(y,x);
            can[x][y]=can[y][x]=1;
        }
        mcs();
        for(int i=1;i<=n;i++)rk[seq[i]]=i;
        for(int i=n;i;i--){
            int x=seq[i];cnt=0;
            for(int j=last[x];j;j=e[j].nxt){
                if(rk[e[j].to]>rk[x])tmp[++cnt]=rk[e[j].to];
            }
            sort(tmp+1,tmp+cnt+1);
            for(int i=2;i<=cnt;++i){
                if(!can[seq[tmp[1]]][seq[tmp[i]]])
                {puts("Imperfect
    ");return 0;}
            }
        }
        printf("Perfect
    ");
        return 0;
    }
  • 相关阅读:
    js高级教程阅读笔记 第一章-js的简介
    angular.element方法汇总
    AngularJS第六课(路由)
    AngularJS第五课(模块,动画,依赖注入)
    javascript基础整理(面试必备)
    Google工具page-speed使用教程(网站性能检测)
    常见前端面试题及答案
    css之布局那些事
    jquery之全屏滚动插件fullPage.js
    Git远程操作详解
  • 原文地址:https://www.cnblogs.com/dibaotianxing/p/8311039.html
Copyright © 2011-2022 走看看