[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 ...
随机推荐
- FFmpeg简易播放器的实现-音视频播放
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10235926.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- FFmpeg简易播放器的实现-音频播放
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10068490.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- [JSOI 2007]字符加密Cipher
Description 题库链接 给你一个长度为 \(n\) 的字符串,首尾相接依次断开每个断点可以得到 \(n\) 个长度为 \(n\) 的字符串,将其排序按序输出每个字符串的最后一个字母. \(1 ...
- GCD之Group
1.问题的提出 在上面的GCD之全局.主线程中介绍了dispatch_get_global_queue.dispatch_get_main_queue的用法,可以看到最后执行的时间在10s 左右,在上 ...
- 自己写一个java的mvc框架吧(五)
自己写一个mvc框架吧(五) 给框架添加注解的支持 一段废话 上一章本来是说这一章要写视图处理的部分,但是由于我在测试代码的时候需要频繁的修改配置文件,太麻烦了.所以这一章先把支持注解的功能加上,这样 ...
- java自动生成代码
看到这个标题,如果你以为真的可以完全自动生成,那你就太Naive啦 我这里想介绍的是,利用模板生成我们需要的代码 一.模板 首先来说说模板,常见的java模板有:FreeMarker.Velocity ...
- Hexo的搭建
Hexo的安装与初始化 1.确保电脑已经安装Node.js,Git 打开GUI Bash,输入以下代码安装Hexo: npm install -g hexo-cli 2.运行以下命令在目标文件夹初始化 ...
- java 非阻塞算法实现基础:unsafe类介绍
一.为什么要有Unsfae.我们为什么要了解这个类 1. java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 2.java的并发包中底层大量的使用这个类的功能 ...
- 漫画 | Java多线程与并发(一)
1.什么是线程? 2.线程和进程有什么区别? 3.如何在Java中实现线程? 4.Java关键字volatile与synchronized作用与区别? volatile修饰的变量不保留拷贝,直接访问主 ...
- Software-Defined Networking之搬砖的故事
在很久很久以前,有一个村子. 村里的每一户,都有一个男人和一个女人. 每一户,都以搬砖为生. 从不同的地方,搬到不同的地方. 男人负责搬砖,女人负责告诉男人往哪搬. 每个家庭,都服从村委会的指挥. 村 ...