BZOJ5412 : circle
若仅保留这$k$个点仍然有环,那么显然无解。
否则设$A$表示这$k$个点的集合,$B$表示剩下的点的集合,因为是竞赛图,每个集合内部的拓扑关系是一条链,方便起见将所有点按照在所在集合的链上的位置进行重标号。
对于$B$中每个点$i$,求出$l_i$表示最小的$j$,满足$B_i\rightarrow A_j$有边,再求出$r_i$表示最大的$j$,满足$A_j\rightarrow B_i$有边。
那么需要保留$B$中尽可能多的点,满足对于任意两个点$B_j,B_i(j\leq i)$都有$r_j<l_i$,不然就会有环,即$l_i>\max(r_j)(j\leq i)$。
考虑DP,设$f[i][j]$表示考虑$B$中前$i$个点,前面选择的点的$r$的最大值为$j$时最多可以选择几个点,暴力转移即可。
时间复杂度$O(n^2)$。
#include<cstdio>
const int N=2010,BUF=12000000;
char Buf[BUF],*buf=Buf;
int n,m,i,j,x,y,l[N],r[N],L,R,a[N],ca,b[N],cb,q[N],h,t,d[N],cnt;bool g[N][N],vip[N];
int f[N][N],ans;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
void toposort(int S){
for(i=1;i<=n;i++)d[i]=0;
for(i=1;i<=n;i++)if(vip[i]==S)for(j=1;j<=n;j++)if(vip[j]==S)d[j]+=g[i][j];
for(h=i=1,t=cnt=0;i<=n;i++)if(vip[i]==S){
cnt++;
if(!d[i])q[++t]=i;
}
while(h<=t)for(x=q[h++],i=1;i<=n;i++)if(vip[i]==S&&g[x][i])if(!(--d[i]))q[++t]=i;
}
inline void up(int&a,int b){a<b?(a=b):0;}
inline int max(int a,int b){return a>b?a:b;}
int main(){
fread(Buf,1,BUF,stdin);read(n),read(m);
for(i=1;i<=n;i++)for(j=1;j<=n;j++)read(x),g[i][j]=x;
for(i=1;i<=m;i++)read(x),vip[x]=1;
toposort(1);
if(t<cnt)return puts("impossible"),0;
for(i=1;i<=cnt;i++)a[++ca]=q[i];
toposort(0);
for(i=1;i<=cnt;i++)b[++cb]=q[i];
for(i=1;i<=ca;i++)d[a[i]]=i;
for(i=1;i<=cb;i++){
x=b[i];
L=ca+1,R=0;
for(j=1;j<=n;j++)if(vip[j]){
y=d[j];
if(g[x][j]){
if(y<L)L=y;
}else if(y>R)R=y;
}
for(j=0;j<=ca;j++)f[i][j]=f[i-1][j];
if(L>R)for(j=0;j<L;j++)up(f[i][j>R?j:R],f[i-1][j]+1);
}
for(j=0;j<=ca;j++)up(ans,f[cb][j]);
ans=cb-ans;
if(ans>=m)puts("impossible");else printf("%d",ans);
return 0;
}
BZOJ5412 : circle的更多相关文章
- [翻译svg教程]svg中的circle元素
svg中的<circle> 元素,是用来绘制圆形的,例如 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink= ...
- 设计一个程序,程序中有三个类,Triangle,Lader,Circle。
//此程序写出三个类,triangle,lader,circle:其中triangle类具有类型为double的a,b,c边以及周长,面积属性, //具有周长,面积以及修改三边的功能,还有判断能否构成 ...
- c++作业:Circle
Circle Github链接
- Modified Least Square Method and Ransan Method to Fit Circle from Data
In OpenCv, it only provide the function fitEllipse to fit Ellipse, but doesn't provide function to f ...
- [javascript svg fill stroke stroke-width circle 属性讲解] svg fill stroke stroke-width circle 属性 绘制圆形及引入方式讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- (1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,
package com.hanqi.test; //创建接口 public interface ShapePara { //获取面积的方法 double getArea(); //获取周长的方法 do ...
- 东大oj-1591 Circle of friends
题目描述 Nowadays, "Circle of Friends" is a very popular social networking platform in WeChat. ...
- svg学习(四)circle
<circle> 标签 < <?xml version="1.0" standalone="no"?> <!DOCTYPE ...
- 后缀数组 --- WOj 1564 Problem 1564 - A - Circle
Problem 1564 - A - Circle Problem's Link: http://acm.whu.edu.cn/land/problem/detail?problem_id=156 ...
随机推荐
- renren-fast
一开始不成功的,多半是粗心或者对这个框架不熟悉造成的. //=============== 代码生成器中这个要填好 我用了默认,但是我把它放到了 renren-fast\src\main\java\i ...
- 最新传智播客web前端开发39期视频教程【完整版】
本套视频为传智2018web前端开发全套视频教程基础班+就业班,视频+源码+案例笔记,全套高清不加密~2018最新传智播客视频! 本教程是实战派课程!为传智最新web前端39期,挑战全网最全视频,没有 ...
- JAVA学习笔记(1)—— eclipse自动补全和主题及字体配置
1.自动补全功能 (1)打开 Eclipse -> Window -> Perferences (2)选择Java -> Editor -> Content Assist -& ...
- TV TimeShift和PVR的区别
Timeshift是在PVR菜单下,PVR菜单下一般有两个功能一个是刻录功能,一个是Timeshift功能,这两个功能都需要u盘或者内存卡的支持,刻录时把当前的节目刻录进优盘想看的时候还可以打开看,T ...
- Win10如何彻底禁用小娜?彻底禁用小娜的方法
原文地址:https://www.cnblogs.com/zhuimengle/p/5949152.html 小娜是Win10系统中的一款强大功能,有了它,我们对电脑的操作将更加方便.Win10系统有 ...
- Linux 用户组
文件权限 r w x 文件时的权限介绍 r 可读 可以使用 cat.less等命令 w 可写 可以编辑,删除此文件 x 可执行 可以命令行模式下提交给内核运行此命令 当时目录时 r 可以使用ls列出 ...
- Oracle DBA 必须掌握的 查询脚本:
Oracle DBA 必须掌握的 查询脚本: 0:启动与关闭 orcle 数据库的启动与关闭 1:连接数据库 2:数据库开启状态的实现步骤: 2-1:启动数据库 2- ...
- 2、jenkins+svn自动发布和回滚
Jenkins配置回滚思路: 目前只能实现使用salt来管控配置文件的管控,配置文件的版本回滚需要后续定制化开发,或者进行格外其他的管理操作.后续实现 以下配置可以为每个项目备份构建文件到本地指定路径 ...
- 数据库根据id排序
select * from 表名 order by id 根据 id 从小到大排序
- ansible-mysql
ansible mysql -m command -a "yum -y install https://www.percona.com/downloads/percona-monitorin ...