Portal --> qwq(貌似是CodeForces Gym 100228 (ECNA2003) - I)

Description

  对于长度为 \(n\) 的序列 \(A\) ,定义其逆序图 \(G\) 如下:无向图 \(G\)有\(n\) 个节点,编号为 \(0..n-1\) ;对于任意的$ 0≤i<j≤n−1$ ,如果有 \(a[i]>a[j]\),那么 \(G\)中存在一条 \(i\)和 \(j\)之间的边。例如:\(A=\{1,3,4,0,2\}, G=\{(0,3),(1,3),(1,4),(2,3),(2,4)\}\)

​  定义独立集 \(S\):对于\(∀x∈S,y∈S\) ,都不存在一条边$ (x,y)$

​  定义覆盖集 \(S\) :对于\(∀x∉S\),至少存在一条边$ (x,y)$,使得 \(y∈S\)

​  现在给你一个逆序图 \(G\)(保证合法),求$ G$ 有多少个点集既是独立集又是覆盖集。

​  数据范围:\(1<=n<=1000,0<=m<=n*(n-1)/2\)

  

Solution

​  首先。。图的独立集是。。一个np问题==那所以直接在图上面搞什么的显然是不理智的qwq

  那所以。。要好好利用逆序图这个条件

  把独立集和覆盖集放在回原来的序列里面来看,其实就是:\(S\)中的元素无法构成逆序对(也就是说。。必须递增),并且任意非\(S\)元素均能与\(S\)中至少一个元素构成逆序对

​  所以我们其实是要找有多少个递增的子序列满足第二个条件

​  这个要怎么找呢。。考虑dp,记\(f[i]\)表示以\(i\)结尾的满足条件的子序列有多少个,那么考虑转移,\(f[i]\)能够转移到\(f[j]\),当且仅当满足\(a[i]<a[j]\)并且\(i\)和\(j\)中间的这段都要能和子序列中的至少一个元素构成逆序对,也就是要么小于\(a[i]\)要么大于\(a[j]\),然后因为如果小于\(a[i]\)的话不满足第一个转移条件,所以\(i\)到\(j\)之间的,除了之前能够转移的位置,其他肯定都是小于\(a[i]\)的不用管,我们只要看\(>a[i]\)中最大的那个是不是\(>a[j]\)就好了,具体实现其实很简单,因为这些需要单独考虑的位置肯定是之前遇到的能够转移的位置,所以我们开多一个\(tmp\)记录一下最大值即可

​  至于这个序列要怎么还原,因为只有大于和小于关系,所以。。我们钦定一下这个序列是一个\(1\)到\(n\)的排列,然后我们可以通过逆序对得到每个数前面比它大的有多少个,后面比它大的有多少个,那就可以得到每个数的具体值了(为了方便统计答案我们可以将\(a[n+1]\)钦定成一个很大的数然后计算到\(n+1\)位,答案就是\(f[n+1]\))

  

​  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=1010;
struct Rec{
int x,y;
}rec[N*(N-1)/2];
int a[N],cnt[N];
ll f[N];
int n,m,ans;
void dp(){
int tmp;
f[0]=1;
for (int i=0;i<=n;++i){
tmp=n+2;
for (int j=i+1;j<=n+1;++j){
if (a[j]<a[i]||a[j]>=tmp) continue;
f[j]+=f[i];
tmp=a[j];
}
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i) cnt[i]=n-i;
for (int i=1;i<=m;++i){
scanf("%d%d",&rec[i].x,&rec[i].y);
++rec[i].x; ++rec[i].y;
if (rec[i].x>rec[i].y) swap(rec[i].x,rec[i].y);
++cnt[rec[i].y]; --cnt[rec[i].x];
}
for (int i=1;i<=n;++i) a[i]=n-cnt[i];
a[n+1]=n+1;
dp();
printf("%d\n",f[n+1]);
}

【CF Gym100228】Graph of Inversions的更多相关文章

  1. 【CF#338D】GCD Table

    [题目描述] 有一张N,M<=10^12的表格,i行j列的元素是gcd(i,j) 读入一个长度不超过10^4,元素不超过10^12的序列a[1..k],问是否在某一行中出现过 [题解] 要保证g ...

  2. 【CF#303D】Rotatable Number

    [题目描述] Bike是一位机智的少年,非常喜欢数学.他受到142857的启发,发明了一种叫做“循环数”的数. 如你所见,142857是一个神奇的数字,因为它的所有循环排列能由它乘以1,2,...,6 ...

  3. 【CF 463F】Escape Through Leaf

    题意 给你一棵 \(n\) 个点的树,每个节点有两个权值 \(a_i,b_i\). 从一个点 \(u\) 可以跳到以其为根的子树内的任意一点 \(v\)(不能跳到 \(u\) 自己),代价是 \(a_ ...

  4. 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)

    A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...

  5. 【CF 585E】 E. Present for Vitalik the Philatelist

    E. Present for Vitalik the Philatelist time limit per test 5 seconds memory limit per test 256 megab ...

  6. 【35.20%】【CF 706D】Vasiliy's Multiset

    time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...

  7. 【26.8%】【CF 46D】Parking Lot

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. 【31.42%】【CF 714A】Meeting of Old Friends

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  9. 【31.95%】【CF 714B】Filya and Homework

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

随机推荐

  1. git clone、git pull和git fetch的用法及区别

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...

  2. Django-建立网页

    进入cmd模式做 django-admin startproject helloworld创建一个project,并命名helloworld,新生成的文件结构如下   输入python manage. ...

  3. 基于C#的机器学习--模糊逻辑-穿越障碍

    模糊逻辑-穿越障碍 模糊逻辑.另一个我们经常听到的术语.但它的真正含义是什么?它是否意味着不止一件事?我们马上就会知道答案. 我们将使用模糊逻辑来帮助引导一辆自动驾驶汽车绕过障碍,如果我们做得正确,我 ...

  4. 剑指Offer66题的总结、目录

    原文链接 剑指Offer每日6题系列终于在今天全部完成了,从2017年12月27日到2018年2月27日,历时两个月的写作,其中绝大部分的时间不是花在做题上,而是花在写作上,这个系列不适合大神,大牛, ...

  5. ES6的新特性(8)——数组的扩展

    数组的扩展 扩展运算符 含义 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) / ...

  6. 第一次c++团队合作项目第二篇随笔

    随着时间的推移,项目也逐渐展开.我的地图也通过按钮的拼接完成了一小部分.这部分我是用了QT上的按钮类来实现的.接下来就是给按钮贴上图片,然后最重要也是最困难的是实现参数的传递,如何实现点击一个英雄或小 ...

  7. mybatis update数据时无异常但没更新成功;update异常时如数据超出大小限制,造成死锁

    没更新的问题原因: sqlSession.commit(); 没执行commit,但官方文档里有这样的描述:“默认情况下 MyBatis 不会自动提交事务,除非它侦测到有插入.更新或删除操作改变了数据 ...

  8. vue+postcss报错: variable '--primary-color' is undefined and used without a fallback

    之前vue-cli3引入postcss的配置: https://www.cnblogs.com/XHappyness/p/7676680.html 发现这么一个问题,我再全局global.css中定义 ...

  9. 剖析Vue原理&实现双向绑定MVVM-2

    vue.js 最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统.本文仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化得不能再简化的代码实现一个简单的 hello world 示例. 一 ...

  10. C#和Java访问修饰符的比较

    访问修饰符对于C#:类 的默认修饰符是 internal(外部类只能被public / internal 修饰)枚举 的默认修饰符是 public 且此类型不允许其它访问修饰符接口 的默认修饰符是 i ...