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 ...
随机推荐
- Writage让你的Word支持Markdown
Writage 简单的执行后,word就可以在保存或打开的时候支持Markdown了!
- MATLAB cftool工具数据拟合结果好坏判断
SSE和RMSE比较小 拟合度R接近于1较好 * 统计参数模型的拟合优度 1.误差平方和(SSE) 2. R-Square(复相关系数或复测定系数) 3. Adjusted R-Square(调整自由 ...
- 原生JS实现banner图的滚动与跳转
HTML部分: <div id="banner"> <!--4张滚动的图片--> <div id="inside"> < ...
- R猜拳游戏解释
R猜拳游戏解释 作者:梁 蓉 猜拳游戏大概解释: 搜集齐数据框,for循环在三个随机数里抽俩个,抽出的数据放回,继续抽取剪刀石头布,机器人出剪刀石头布,我出对应压制机器人的方法来赢取胜利,我给机器人发 ...
- MYSQL数据库的设计与调优
优化思路: 1.检查数据表结构,改善不完善设计 2.跑一遍主要业务,收集常用的数据库查询SQL 3.分析查询SQL,适当拆分,添加索引等优化查询 4.优化SQL的同时,优化代码逻辑 5.添加本地缓存和 ...
- 深入web的请求过程
一.深入web的请求过程 1.1.B/S网络架构概述 · 从前端到后端,都基于应用层协议HTTP来交互数据.一个请求就对应了一个操作,完成操作之后就断开了连接.基于这样的特点可以用来满足海量的用户的操 ...
- 软件测试为什么需要学习Linux的知识?Linux学到什么程度?-log5
软件测试为什么需要学习Linux的知识?学到什么程度?-log5 Dotest软件测试学堂-董浩 公司目前90%的服务器操作系统不是Windows,而是Linux(RedHat.Debian.Cen ...
- python 中 dlib库的安装
安装 dlib 库的时候需要用到 CMake 进行本地编译,而Cmake又是基于Visual Studio运行的,我在装这个库的时候,各种找不到教程,就想着分享一下自己的经验. 32位 python3 ...
- P5300 [GXOI/GZOI2019]与或和
题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ...
- iframe父页面和子页面调用
我在页面中使用iframe标签,有的时候就需要两个页面交互 <iframe id="Iframe" src="{{url('field/user')}}" ...