[2018HN省队集训D9T1] circle
[2018HN省队集训D9T1] circle
题意
给定一个 \(n\) 个点的竞赛图并在其中钦定了 \(k\) 个点, 数据保证删去钦定的 \(k\) 个点后这个图没有环. 问在不删去钦定的这 \(k\) 个点的情况下最少要删几个点让原图没有环. 如果不存在答案小于 \(k\) 的解则输出 impossible.
\(n,k\le2000\).
题解
好像这篇草稿鸽的时间有点久qaq
首先一个显然的性质是无环的竞赛图一定是一个全序集.
其次是如果钦定的点不是全序集那么必定无解.
无解判掉之后所有的点就被分成了两个全序集合(数据保证剩下的点无环). 我们枚举剩下的点看它能不能合法插入被钦定的全序集中. 对于能合法插入的点, 一定会有一个唯一的插入位置. 显然我们必须让这些点的插入位置递增(因为要满足两个全序关系). 于是我们按照全序顺序把所有能插入的点的插入位置求出来, 然后在上面求一个最长上升子序列就好了.
时间复杂度 \(O(n^2)\).
参考代码
#include <bits/stdc++.h>
const int MAXN=2010;
int n;
int k;
int val[MAXN];
int cnt[MAXN];
bool blk[MAXN];
int m[MAXN][MAXN];
std::vector<int> s;
std::vector<int> r;
void Fail();
int ReadInt();
int main(){
n=ReadInt();
k=ReadInt();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
m[i][j]=ReadInt();
for(int i=0;i<k;i++){
s.push_back(ReadInt());
blk[*s.rbegin()]=true;
}
for(int i=1;i<=n;i++)
if(!blk[i])
r.push_back(i);
auto cmp=[](int a,int b){return bool(m[a][b]);};
std::sort(r.begin(),r.end(),cmp);
std::stable_sort(s.begin(),s.end(),cmp);
for(int i=0;i<k;i++)
for(int j=i+1;j<k;j++)
if(!cmp(s[i],s[j]))
Fail();
for(auto i:r){
bool flag=true;
for(auto j:s){
if((!flag)&&cmp(j,i)){
val[i]=-1;
break;
}
flag&=cmp(j,i);
if(flag)
++val[i];
}
}
int ans=0;
for(auto i:r){
if(val[i]==-1)
continue;
cnt[i]=1;
for(auto j:r){
if(i==j)
break;
if(val[j]!=-1&&val[j]<=val[i])
cnt[i]=std::max(cnt[i],cnt[j]+1);
}
ans=std::max(ans,cnt[i]);
}
ans=r.size()-ans;
if(ans<k)
printf("%d\n",ans);
else
Fail();
return 0;
}
void Fail(){
puts("impossible");
exit(0);
}
int ReadInt(){
int x=0;
register char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch)){
x=x*10+ch-'0';
ch=getchar();
}
return x;
}

[2018HN省队集训D9T1] circle的更多相关文章
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...
- [2018HN省队集训D8T3] 水果拼盘
[2018HN省队集训D8T3] 水果拼盘 题意 给定 \(n\) 个集合, 每个集合包含 \([1,m]\) 中的一些整数, 在这些集合中随机选取 \(k\) 个集合, 求这 \(k\) 个集合的并 ...
- [2018HN省队集训D6T2] girls
[2018HN省队集训D6T2] girls 题意 给定一张 \(n\) 个点 \(m\) 条边的无向图, 求选三个不同结点并使它们两两不邻接的所有方案的权值和 \(\bmod 2^{64}\) 的值 ...
- [Luogu P4143] 采集矿石 [2018HN省队集训D5T3] 望乡台platform
[Luogu P4143] 采集矿石 [2018HN省队集训D5T3] 望乡台platform 题意 给定一个小写字母构成的字符串, 每个字符有一个非负权值. 输出所有满足权值和等于这个子串在所有本质 ...
- [2018HN省队集训D5T2] party
[2018HN省队集训D5T2] party 题意 给定一棵 \(n\) 个点以 \(1\) 为根的有根树, 每个点有一个 \([1,m]\) 的权值. 有 \(q\) 个查询, 每次给定一个大小为 ...
- [2018HN省队集训D5T1] 沼泽地marshland
[2018HN省队集训D5T1] 沼泽地marshland 题意 给定一张 \(n\times n\) 的棋盘, 对于位置 \((x,y)\), 若 \(x+y\) 为奇数则可能有一个正权值. 你可以 ...
- [Codeforces 321D][2018HN省队集训D4T2] Ciel and Flipboard
[Codeforces 321D][2018HN省队集训D4T2] Ciel and Flipboard 题意 给定一个 \(n\times n\) 的矩阵 \(A\), (\(n\) 为奇数) , ...
- [2018HN省队集训D1T3] Or
[2018HN省队集训D1T3] Or 题意 给定 \(n\) 和 \(k\), 求长度为 \(n\) 的满足下列条件的数列的数量模 \(998244353\) 的值: 所有值在 \([1,2^k)\ ...
- [2018HN省队集训D1T1] Tree
[2018HN省队集训D1T1] Tree 题意 给定一棵带点权树, 要求支持下面三种操作: 1 root 将 root 设为根. 2 u v d 将以 \(\operatorname{LCA} (u ...
随机推荐
- .19-浅析webpack源码之compile流程-rules参数处理(2)
第一步处理rule为字符串,直接返回一个包装类,很简单看注释就好了. test/include/exclude 然后处理test.include.exclude,如下: if (rule.test | ...
- Docker学习链接
Docker安装篇 1>.Windows Docker 安装
- [日常] Go语言圣经--并发的循环习题
练习 8.4: 修改reverb2服务器,在每一个连接中使用sync.WaitGroup来计数活跃的echo goroutine.当计数减为零时,关闭TCP连接的写入,像练习8.3中一样.验证一下你的 ...
- 24.Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)
1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选 1)使能CLE 2)发送0X90命 ...
- Java基础——线程
一. 进程 是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程. 比如在Windows系统中,一个运行的exe就是一个进程. 二.线程 是指进程中的一个执行流 ...
- retrofit2 不创建对象直接返回字符串
retrofit请求直接返回string 有个需求是直接用retrofit去get网页得到html,不创建对象. 用上面文章讲的方法,直接返回ResponseBody ICollection: pub ...
- HDU4565(SummerTrainingDay05-C 矩阵快速幂)
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- div阴影
.box-shadow{ //Firefox4.0- -moz-box-shadow:投影方式 X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色; //Safariand Google ch ...
- python-责任链模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 当你作为一名coder已经快三十却还还没有女朋友,家中父母已经着急万分,此时要求 ...
- Mysql数据库 的库表简易操作
一. 库的操作 1.创建数据库 创建数据库: create database 库名 charset utf8; charset uft8 可选项 1.2 数据库命名规范: 可以由字母.数字.下划 ...