description

题目描述
小豆报名参加智力竞赛,他带上了 n个好朋友作为亲友团一块来参加比赛。
比赛规则如下:一共有 m道题目,每个人都有 1 次答题机会,每次答题为选择一道题目回答,在回答正确后,可以从这个题目的后续题目,直到题目答错题目或者没有后续题目。
每个问题都会代表一个价值,比赛最后的参赛选手获得奖励价值等价于该选手和他的亲友团没有回答的问题中的最低价值。
我们现在知道小豆和他的亲友团实力非常强,能够做出这次竞赛中的所有题目。
小豆想知道在知道题目和后续题目的条件下,他最大能获得价值是多少?

输入格式
第一行有两个整数 n, m
接下来 m行,第 i+1 行表示编号为 i的题目的题目信息;
格式如下 vi,ki,ai,1,ai,2,…,ai,ki
其中 vi表示该题目的价值, ki 表示这个题目的后续, ai,1,ai,2,…,ai,ki 表示这 i个题目的后续题目编号。

输出格式
如果全部题目都能答对,则输出 AK ,否则输出小豆可以获得的最高奖励价值。

样例
样例输入 1

1 3
1 0
2 1 3
3 0AK

样例输入 2

1 6
1 2 2 3
2 1 4
3 1 4
4 1 6
5 0
6 05

数据范围与提示
对于 10%的数据, 1≤n,m≤10 。
对于 20% 的数据, 1≤n,m≤100 。
对于 100% 的数据, 1≤n≤50,1≤m≤500,vi≤109,ki,ai,j≤m

solution

说实话没读懂题面

一句话题意:给出一个带权有向图,选出n+1n+1n+1条链
能否全部点覆盖,如果不能,不能覆盖的点权最小值最大是多少

最小值最大,套路又整二分上
考虑二分不能覆盖的最小值
就转化为了DAGDAGDAG的最小不相交路径覆盖条数
也就可以转化为二分图最大匹配,最大匹配数就是可合并的路径条数
点数➖最大匹配数=最小不相交路径覆盖数

如果二分结果大于最大值,就说明每道题都能被覆盖到,就AKAKAK了

code

#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define maxn 505
vector < int > G[maxn];
int n, m;
int val[maxn], match[maxn];
int g[maxn][maxn], f[maxn][maxn];
bool vis[maxn];bool find( int u ) {for( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i];if( vis[v] ) continue;vis[v] = 1;if( ! match[v] || find( match[v] ) ) {match[v] = u;return 1;}}return 0;
}bool check( int x ) {memset( match, 0, sizeof( match ) );for( int i = 1;i <= m;i ++ ) G[i].clear();memset( f, 0, sizeof( f ) );for( int i = 1;i <= m;i ++ )for( int j = 1;j <= m;j ++ )if( val[i] <= x && val[j] <= x )f[i][j] = g[i][j];for( int k = 1;k <= m;k ++ )for( int i = 1;i <= m;i ++ )if( f[i][k] )for( int j = 1;j <= m;j ++ )f[i][j] |= f[i][k] & f[k][j];int tot = 0;for( int i = 1;i <= m;i ++ ) {if( val[i] > x ) continue;tot ++;for( int j = 1;j <= m;j ++ )if( f[i][j] ) G[i].push_back( j );}for( int i = 1;i <= m;i ++ ) {if( val[i] > x ) continue;memset( vis, 0, sizeof( vis ) );if( find( i ) ) tot --;}return tot <= n;
}int main() {scanf( "%d %d", &n, &m );n ++;int l = 1e9, r = 0;for( int i = 1, c, x;i <= m;i ++ ) {scanf( "%d %d", &val[i], &c );l = min( l, val[i] ), r = max( r, val[i] );while( c -- ) scanf( "%d", &x ), g[i][x] = 1;}for( int k = 1;k <= m;k ++ )for( int i = 1;i <= m;i ++ )if( g[i][k] ) //不加此优化 时间复杂度就会跑满m^3log for( int j = 1;j <= m;j ++ )g[i][j] |= g[i][k] & g[k][j];int maxx = r;while( l <= r ) {int mid = ( l + r ) >> 1;if( check( mid ) ) l = mid + 1;else r = mid - 1;}if( l > maxx ) printf( "AK\n" );else printf( "%d\n", l );return 0;
}

[TJOI2018]智力竞赛 (匈牙利)相关推荐

  1. 智力竞赛抢答器Verilog HDL设计

    设计任务 智力竞赛抢答器Verilog HDL要求有6位参赛者进行抢答,有六个抢答信号进行抢答.当有抢答选手按下抢答键后系统能够快速准确的判断是那一组选手按下了抢答信号,由于系统比较小,速度比较快一般 ...

  2. 智力竞赛抢答器的设计与调试

    智力竞赛抢答器的设计与调试   一.  实验目的 (1) 了解一个数字系统的基本组成及它的控制电路的设计. (2) 熟悉集成芯片的综合应用和PLD的应用与特点. (3) 学习用实验的方法来完善理论设计 ...

  3. 八人抢答器讲解_八人智力竞赛抢答器

    1 摘 要 本报告设计的八路智力竞赛抢答器电路主要采由 74 系列常用集成电路组成,涉及到触 发器.编码器.加法器.译码器和 RC 电路组成的多谐振荡电路.该抢答器具有基本的抢答 功能, 通过共阴极数 ...

  4. 智力竞赛抢答器 Verilog HDL 建模

    设计题目: 智力竞赛抢答器 Verilog HDL 建模 设计要求: 1. 5 组参赛者进行抢答: 2. 当抢先者按下按钮时,抢答器能准确判断,并以声.光标志(模拟).要求声响.光亮时间为 3s 后自 ...

  5. 实验三、8人智力竞赛抢答电路设计

    实验三  8人智力竞赛抢答电路设计 实验目的 设计一个能支持八路抢答的智力竞赛抢答器: 主持人按下开始抢答的按键后,有短暂的报警声提示抢答人员抢答开始且指示灯亮表示抢答进行中: 在开始抢答后数码管显8 ...

  6. 三路智力竞赛抢答装置

    三路智力竞赛抢答装置 一.实验目的.设计任务及要求 (1).目的要设计一个三路智力竞赛. (2).设计任务和要求 1.智力竞赛抢答装置可同时供三名选手或三个代表队参赛,他们的编号分别为1.2 3;每个 ...

  7. 【BZOJ5335】【TJOI2018】—智力竞赛(floyd传递闭包+二分图匹配)

    传送门 可以二分变成直接求最大链覆盖,因为可以重复经过一个点 floydfloydfloyd传递闭包就可以了 #include<bits/stdc++.h> using namespace ...

  8. 【数字电子电路基础】智力竞赛抢答器

    文章目录 序言 完整仿真电路图 1. 设计要求 2.主要器件 3.设计原理 4.设计实验及其原理 序言 抢答器作为一种工具已经广泛的应用于各种智力和知识竞赛场合.在竞 赛文体娱乐活动抢答活动中能准确. ...

  9. PTA 7-6 评委打分 java语言 班级里要搞智力竞赛 同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分

    这是最笨的办法,老师看了都无语的那种,但是不用数组的情况下,这也是一种解法 输入格式: 第一行有十个整数,表示十位同学的初始分.第二行一个整数n,表示有n道题竞赛. 接下去有n行,每行有一个数字x,x ...

最新文章

  1. (转载)(官方)UE4--图像编程----Parallel Rendering Overview
  2. before与after的一些应用总结
  3. 大数据人力资源服务平台正式上线
  4. swift 组件化_打造完备的iOS组件化方案:如何面向接口进行模块解耦?
  5. wireshark提取流量包中的文件_[技术]Wireshark抓取的数据包提取文件
  6. 无惧海量并发,运维准点下班全靠它
  7. 比iOS还流畅!国产手机最优秀90Hz手机发布,2999元起
  8. 控制台总是输出:xcode error: failed to attach to process ID 0
  9. php自动关机代码,vb下的恶搞关机程序
  10. 量子计算机时空穿越,科学家用量子计算机模拟时间机器 人类能否回到过去?...
  11. ACL 2021 | 信息抽取与词表学习
  12. 机器学习入门——详解主成分分析
  13. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法...
  14. U盘病毒从认识到防范
  15. java用1234组成_java编程题,java1234组成三位数不重复
  16. 【九天教您南方cass 9.1】 10 DTM土方计算的四种方法
  17. RF模型(随机森林模型)详解
  18. android高效模拟器,51模拟器
  19. 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解
  20. winRE环境下使用xcopy时显示未找到文件

热门文章

  1. mysql 导入文件夹_MySQL-导入与导出
  2. php server 连接字符串,sqlServer 数据库常用连接字符串
  3. android 栏目编辑,android – 编辑文本导致内存泄漏
  4. 四川大学计算机科学与技术专业分数线,2015年四川大学计算机科学与技术硕士考研复试分数线是290分...
  5. myclipes 配置php,myclipse使用技巧
  6. java导入导出excel_Java导入导出Excel工具 easyexcel
  7. .md是什么文件_Element-UI源码阅读之md显示到页面
  8. matlab群延时函数,群延迟函数(group delay function)群延迟滤波器 | 学步园
  9. 机器学习——常用算法的总结
  10. idea报错Class not found (在target中没有生成对应的class文件)