zoukankan      html  css  js  c++  java
  • SEERC 2018 Inversion

    题意:

    如果p数组中 下标i<j且pi>pj 那么点i j之间存在一条边

    现在已经知道边,然后求p数组

    在一张图中,求有多少个点集,使得这个点集里面的任意两点没有边

    不在点集里面的点至少有一条边连向点集中一点

    思路:

    我们考虑一条边 (i,j)(i,j)(i,j)那么定义在一个序列中(i,j)为一个逆序对

    那么就是找上升子序列的个数

    #include<bits/stdc++.h>
    using namespace std;
    const int M=120;
    typedef long long ll;
    int g[M][M];
    ll dp[M];
    inline int read(){
        int sum=0,x=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-')
                x=0;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
            sum=(sum<<1)+(sum<<3)+(ch^48),ch=getchar();
        return x?sum:-sum;
    }
    inline void write(ll x){
        if(x<0)
            putchar('-'),x=-x;
        if(x>9)
            write(x/10);
        putchar(x%10+'0');
    }
    
    int main(){
        int n=read(),m=read();
        while(m--){
            int u=read(),v=read();
            g[u][v]=1;
            g[v][u]=1;
        }
        dp[0]=1;
        for(int i=1;i<=n+1;i++){
            for(int j=0;j<i;j++){
                if(g[i][j])//存在逆序 
                    continue;
                int fuck=1;
                for(int p=j+1;p<i;p++){
                    if(g[i][p]||g[j][p])//存在逆序 
                        continue;
                    else{
                        fuck=0;
                        break;
                    }
                }
                dp[i]+=fuck*dp[j];
            }
        }
        write(dp[n+1]);
        return 0;
    }
    View Code
  • 相关阅读:
    数据分析05 /pandas的高级操作
    ABP之应用服务(2)
    ABP之应用服务(1)
    ABP之仓储
    ABP之创建实体
    ABP之框架体系
    ABP之项目的搭建
    2018年,加油!!!
    WF的简单使用
    WCF之通信工厂的简单使用
  • 原文地址:https://www.cnblogs.com/starve/p/11622086.html
Copyright © 2011-2022 走看看