码迷,mamicode.com
首页 > 其他好文 > 详细

SEERC 2018 Inversion

时间:2019-10-04 15:03:34      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:frame   onclick   write   style   etc   一个   思路   names   --   

题意:

如果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

 

SEERC 2018 Inversion

标签:frame   onclick   write   style   etc   一个   思路   names   --   

原文地址:https://www.cnblogs.com/starve/p/11622086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!