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
  • 相关阅读:
    0127 date dateformat calebdar
    0126 字符串缓冲区StringBuffer类 正则表达式
    0126 String类
    0125 java API object
    0125 匿名对象 内部类 包 代码块
    0123 final关键字,static 关键字
    0123 this关键字 super关键字
    0122面向对象 构造方法
    0122面向对象3 多态
    0120 面向对象2
  • 原文地址:https://www.cnblogs.com/starve/p/11622086.html
Copyright © 2011-2022 走看看