5811

2020-04-12  本文已影响0人  姜浩_19强化班

题目大意

构造题。n个点,给出n个点能到达点的数量a[i],构造一个有向图,满足条件。N (1 <= N <= 1000)

样例解释:

3

2 1 0

表示点1,2,3能到达的点的数量2,1,0;

构造1->2->3 满足条件。

要求,构造的图不能有重边,不能有环。

题目解析

把a[i]从大到小排序,对于第i个节点,能指向所有大于i的节点,最多能到达(n-i)个节点。

题目大意

有n只monster;

输入一个矩阵mat,表示monster之间的关系;

mat[i][j]=1表示i怪物能打败j怪物;

mat[j][i]=0表示i怪物打不过j怪物;

注意,mat[j][i]=0 <=> mat[i][j]=1 可以互推,但是没有传递性,A能打败B、B能打败C => C能打败A 是不满足的。

输入m,再输入m个数字,表示挑选出m只monster组成T1队,剩下n-m只monster组成T2队,询问T1队与T2队是否合法 (合法是指存在某种排列,排列中任意一只monster都能打败他右边所有monster)?

如果合法,最多从T2队中能选出几只monster插入到T1中,并保证T1合法?

题目解析

要求1,可以用拓扑排序;(O(n^2))

要求2,先按照T2队从大到小的顺序,求出T2队中每个monster对应在T1队的位置pos[i],这样就转换成求pos数组的最长不下降子序列;(O(n^2)的dp)

注意1、2、2、3这种序列是合法的,因为原来T2本来就满足顺序要求(排列中任意一只monster都能打败他右边所有monster);

上一篇下一篇

猜你喜欢

热点阅读