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);