囚人的旋律

题意

给你一个逆序图(令图G为有n个节点的图,编号为1~n。对于满足 1i<jn 的一对 i j,如果有 a[i]>a[j] ,那么在G中编号为 i j的节点之间连一条边。 得到的图G被称为逆序图。),求图G中有多少个点集既是独立点集又是覆盖集。

分析

我们可以先考虑将逆序图还原成原来的序列,然后看看独立点集和覆盖集要满足的条件是怎样。
独立点集:点集中不存在在原图中有边直接相连的点对。就是说点集中不存在序列里的逆序对,点集中的点在原序列里是一个上升序列。
覆盖集:原图中的点都在点集中或与点集中的点任意点有边直接相连。也就是所有序列中所有没选的数,都与选的数构成至少一对逆序对,即在它前面选了一个比它大的数,或在它后面选了一个比它小的数。
将两个结合起来看:若点集中在序列相邻的两个数 ai,aj,(i<j,ai<aj),ak<aiak>aj,k(i,j),ai<ak<aj,k(i,j)
我们设 f[i] 为以第 i 个数为点集结尾的方案数,则

f[i]=f[j]

j

现在问题变成怎么将逆序图转化成序列了。序列从左往右做,我们知道每个位置在它后面比它小的数有 x 个,那么这个位置的数为当前未选的第x+1个数,证明显然。
答案为 f[i] , i 满足ai>aj,j(i,n]

#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 1e3 + 10;
const int P = 1e9 + 7;
int a[N],c[N],f[N];
int n,m;
bool p[N];

void init() {
    scanf("%d%d",&n,&m);
    for (int i = 1;i <= m;i ++) {
        int x,y;
        scanf("%d%d",&x,&y);
        if (x < y) c[x] ++;
        else c[y] ++;
    }
}

void build() {
    for (int i = 1;i <= n;i ++) {
        c[i] ++;
        int j;
        for (j = 1;j <= n;j ++) if (!p[j]) {
            c[i] --;
            if (!c[i]) break;
        }
        a[i] = j;
        p[j] = true;
    }
}

void solve() {
    f[0] = 1;
    for (int i = 1;i <= n;i ++) {
        int cur = -1;
        for (int j = i - 1;j >= 0;j --) {
            if (a[j] < a[i] && cur < a[j]) {
                f[i] = (f[i] + f[j]) % P;
            }
            if (a[j] < a[i]) cur = max(cur,a[j]); 
        }
    }
    int ans = 0;
    for (int i = 1;i <= n;i ++) {
        int flag = 1;
        for (int j = i + 1;j <= n;j ++) if (a[j] > a[i]) {
            flag = 0;
            break;
        }
        ans = (ans + flag * f[i]) % P;
    }
    printf("%d",ans);
}

int main() {
    init();
    build();
    solve();
}
有这样一类成功者:他们经商致富,于居室外置庭院,院中有亭翼然,亭上挂一面额。此时倘有人将“醉翁亭”题至编额中。主人公拍手称快道:“妙哉!”而若将“饮酒亭”题至匾额中,主人则不假思索道:“俗哉!”此类人追求文人本题。但实际上胸无点墨,只管把自己强行嵌入“雅”的框架中,就如同大观园中只顾赏花却不懂花的“伪君子”,总不免贻笑大方。 自古以来,世上总有各种困在框架里而不自知的人。他们如流水般虚浮,惯于遵从过去的经验或偏听一家之言,拘泥于既定枢架范式中。这些框架如同牢笼,让人的思维日渐固化,仿佛被“囚”于牢笼中,不见天日。归根结底,还是人本身缺乏硬实力所致。 在崇尚理学的明清时期,几乎所有人都成了封建社会值硬刻板的“木偶人”。可曹雪芹却通过笔下两个鲜明的角色,跳出了框架的束缚。此二人便是贾宝玉和林黛玉。他们不仅才华横溢,也在教育的熏陶中造就了自己独特的思维方式。这是一种因时因地制宜而去伪存真、去粗取精的思维方法,这样的方法可以教会一个人不要只顾跟随领跑者,而要学会超越领跑者,我愿称之为“宝黛思维”。 春秋时期的美女西施,天生丽质,举手投足间都流露着妩媚与柔情,而那些仰慕西施不顾现实加以效仿的人,不仅失去自己的特点,还闹出东施效颦的笑话。在全民创造短视频的热潮中,李子柒结合自己的兴趣与特长,对中国传统文化加以创新,以最具时代特征的形式,推动中国文化走向世界。由此可见,我们为人处世应当学习“宝黛思维”,以因地制宜为前提,实破框架束缚,勇于创新,方能成事。 虽说“他山之石,可以攻玉”。但真正的好玉,还得用心细“攻”,而非“一锤定音”,强行为之套上框架。只有培养并运用“宝黛思维”,才不会在山清水秀时自我陶醉而落入俗套,才不会在山穷水尽时野驴技穷而止步不前。只有跳出框架的人,才能知所进,知所惧,知所适。识时务。 “宝黛思维”可激发人的潜力,帮助我们脱去少年的程格。少年的我们唯有善用“宝黛思维”,方可跳出“囚人”的框架,释放知识和人生的光彩。 总结大意
02-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值