loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)
目录
题目链接
题解
就是求可重路径覆盖之后最大化剩余点的最小权值
二分答案后就是一个可重复路径覆盖
处理出可达点做二分图匹配就好了
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') c = gc;
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc;
return x * f;
}
void print(int x) {
if(x < 0) {
pc('-');
x = -x;
}
if(x >= 10) print(x / 10);
pc(x % 10 + '0');
}
const int maxn = 507;
int n,m;
bool mp[maxn][maxn];
int val[maxn];
int a[maxn];
void floyd() {
for(int k = 1;k <= n;++ k)
for(int i = 1;i <= n;++ i)
for(int j = 1;j <= n;++ j)
mp[i][j] |= mp[i][k] & mp[k][j];
}
int vis[maxn];
int tot = 0;
int bel[maxn];
bool find(int x,int fa) {
for(int i = 1;i <= tot;++ i) {
if(vis[i] != fa && mp[a[x]][a[i]]) {
vis[i] = fa;
if(!bel[i] || find(bel[i],fa)) {
bel[i] = x;
return true;
}
}
}
return false;
}
int check(int x) {
tot = 0;
for(int i = 1;i <= m;++ i) if(val[i] < x) a[++ tot] = i;
int ret = tot;
memset(bel,0,sizeof bel);
for(int i = 1;i <= tot;++ i) {
if(find(i,i)) ret --;
}
return ret;
}
int main() {
//freopen("contest2.in","r",stdin);
n = read() + 1, m = read();
int mx = 0;
for(int k,i = 1;i <= m;++ i) {
val[i] = read();
mx = std::max(mx,val[i]);
k = read();
for(int v,j = 1;j <= k;++ j) {
v = read();
mp[i][v] = 1;
}
}
floyd();
int ans = -1;
int l = 1,r = mx;
while(l <= r) {
int mid = l + r >> 1;
if(check(mid) <= n) l = mid + 1,ans = mid;
else r = mid - 1;
}
if(l <= mx) print(ans),pc('\n');
else puts("AK");
return 0;
}
loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)的更多相关文章
- 【LOJ】#2574. 「TJOI2018」智力竞赛
题解 二分答案 求最小路径点覆盖 由于这里最小路径点覆盖,点是可重的,用floyd求出传递闭包(也就是求出,哪两点之间是可达的) 最后用这个floyd求出的数组建出一个新图,在这个图上跑普通的最小路径 ...
- Loj #3057. 「HNOI2019」校园旅行
Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你 ...
- LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...
- loj#2013. 「SCOI2016」幸运数字 点分治/线性基
题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...
- LOJ#2230. 「BJOI2014」大融合
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...
- Loj #2553. 「CTSC2018」暴力写挂
Loj #2553. 「CTSC2018」暴力写挂 题目描述 temporaryDO 是一个很菜的 OIer .在 4 月,他在省队选拔赛的考场上见到了<林克卡特树>一题,其中 \(k = ...
- Loj #2719. 「NOI2018」冒泡排序
Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排 ...
- Loj #2570. 「ZJOI2017」线段树
Loj #2570. 「ZJOI2017」线段树 题目描述 线段树是九条可怜很喜欢的一个数据结构,它拥有着简单的结构.优秀的复杂度与强大的功能,因此可怜曾经花了很长时间研究线段树的一些性质. 最近可怜 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
随机推荐
- linux内核中链表代码分析---list.h头文件分析(二)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...
- python3内存存储几种数据类型对差异
列表,元组,集合,字典几种数据类型差异 列表: list=[0,1,'a'] 元组:list=(0,1,'a') 集合 :list=[0,1,'a'] 字典:list={name:'tom',age: ...
- Android学习笔记————利用JDBC连接服务器数据库
/******************************************************************************************** * auth ...
- winform(记事本--剪切复制等和打开)
- java控制语句 if-else while do-while for return break continue goto switch default
if for //: object/ForEachFloat.java package object; import java.util.Random; public class ForEachFlo ...
- Lavarel - 模块间复用代码
代码复用在项目中早晚会遇到,这不在用 Laravel 给博客增加 Feed 订阅功能 就到了需要将生成网页 description 的函数提取出来,在文章显示与 Feed 生成的两个 Controll ...
- poj12482 扫描线+lazy-tag
采用扫描线的思想,其实是区间更新的题目 题解链接https://blog.csdn.net/shiqi_614/article/details/7819232 注意处理细节:1)因为边框上的点不算,所 ...
- 性能测试十二:jmeter进阶之java请求参数化
如项目中的ip.端口号之类的,都可以在此代码中定义 public Arguments getDefaultParameters() { // TODO Auto-generated method st ...
- FFT 【JSOI2012】bzoj4332 分零食 (未解决)
很不错的一道倍增优化dp?? 第一次做这类题挺难想的 题目大意: 有n个小朋友,m块糖. 给小朋友分糖,如果一个小朋友分不到糖,那他后面的小朋友也分不到糖. 每个小朋友有一个喜悦值,有三个参数,O,S ...
- 【转载】和 Thrift 的一场美丽邂逅
http://www.cnblogs.com/cyfonly/p/6059374.html 一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的.每次搜索 “java序列化 ...