EOJ Monthly 2019.2 E. 中位数 (二分+dfs)
题意:
在一个n个点,m条边的有向无环图中,求出所有从1到n
的路径的中位数的最大值
一条路径的中位数指的是:一条路径有 n 个点,
将这 n 个点的权值从小到大排序后,排在位置 ⌊n2⌋+1 上的权值。
思路:
看到权值为1~1e9,可以想到用二分答案,然后我们在验证的时候
可以将小于mid的边权设为-1,大于为1这样遍历一遍序列加起来的值
刚好为0
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 1000005
const ll INF=2e9;
int n,m;
int a[N];
vector<int>v[N];
int dis[N];
int vis[N]; int dfs(int mid,int x)
{
if(vis[x]) return dis[x];
int tmp=a[x]>=mid?:-;
vis[x]=;
for(int i=;i<v[x].size();i++)
{
int t=v[x][i];
dis[x]=max(dis[x],tmp+dfs(mid,t));
}
return dis[x];
}
bool check(int mid)
{
for(int i=;i<=n;i++) dis[i]=-INF;
memset(vis,,sizeof(vis));
vis[]=;
dis[]=a[]>=mid?:-;
return dfs(mid,n)>=;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=;i<=n;i++) scanf("%d",&a[i]);
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
v[y].push_back(x);
}
ll l=,r=INF;
ll ans=-;
while(l<=r)
{
ll mid=l+r>>;
if(check(mid))
{
l=mid+;
ans=mid;
}
else r=mid-;
}
printf("%lld\n",ans);
} return ;
}
EOJ Monthly 2019.2 E. 中位数 (二分+dfs)的更多相关文章
- EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)
题意: 一张由 n 个点,m 条边构成的有向无环图.每个点有点权 Ai.QQ 小方想知道所有起点为 1 ,终点为 n 的路径中最大的中位数是多少. 一条路径的中位数指的是:一条路径有 n 个点,将这 ...
- EOJ Monthly 2019.2 题解(B、D、F)
EOJ Monthly 2019.2 题解(B.D.F) 官方题解:https://acm.ecnu.edu.cn/blog/entry/320/ B. 解题 单测试点时限: 2.0 秒 内存限制: ...
- EOJ Monthly 2019.2
题解 A 回收卫星 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/s ...
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- EOJ Monthly 2019.2 A. 回收卫星
题目传送门 题意: 你可以询问一个三维坐标,机器会告诉你这个坐标在不在目标圆中, 并且(0,0,0)是一定在圆上的,叫你求出圆心坐标 思路: 因为(0,0,0)一定在圆上,所以我们可以把圆心分成3个坐 ...
- EOJ Monthly 2019.2 (based on February Selection) F.方差
题目链接: https://acm.ecnu.edu.cn/contest/140/problem/F/ 题目: 思路: 因为方差是用来评估数据的离散程度的,因此最优的m个数一定是排序后连续的,所以我 ...
- EOJ Monthly 2019.2 (based on February Selection) D.进制转换
题目链接: https://acm.ecnu.edu.cn/contest/140/problem/D/ 题目: 思路: 我们知道一个数在某一个进制k下末尾零的个数x就是这个数整除kx,这题要求刚好末 ...
- EOJ Monthly 2019.2 (based on February Selection) D 进制转换 【数学 进制转换】
任意门:https://acm.ecnu.edu.cn/contest/140/problem/D/ D. 进制转换 单测试点时限: 2.0 秒 内存限制: 256 MB “他觉得一个人奋斗更轻松自在 ...
- EOJ Monthly 2019.1 唐纳德先生与这真的是签到题吗 【数学+暴力+multiset】
传送门:https://acm.ecnu.edu.cn/contest/126/ C. 唐纳德先生与这真的是签到题吗 单测试点时限: 6.0 秒 内存限制: 1024 MB 唐纳德先生在出月赛的过程中 ...
随机推荐
- 【前端】DOM操作
1 什么是DOM 全称 Document Object Model 文档对象模型. 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...
- java:集合输出之foreach输出三
java:集合输出之foreach输出三 foreach输出: List<String> allList = new ArrayList<String>(); allList. ...
- Chrome设置--disable-web-security解决跨域问题
这里介绍的是--disable-web-security参数.这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试. (1)新建一个chrome快捷方式,右键“属性”,“快捷 ...
- LeetCode--009--回文数(python)
判断一个数是否为回文数,回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 通常让数字逆序,然后判断和原数字是否相等,这里只需逆序一般就可以. case1.奇数位例如判断12321 whi ...
- idea上把项目推送到GitHub上
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- 【ELK】elasticsearch设置密码访问
1.需要在配置文件中开启x-pack验证, 修改config目录下面的elasticsearch.yml文件,在里面添加如下内容,并重启. xpack.security.enabled: true x ...
- CSS基础-background的那些属性
background的那些属性 background:背景的意思常用的六个属性 1.background-color:背景颜色 2.background-image:背景图像 3.background ...
- icon组件
iocn组件,小程序给我们提供了一些小图标,与微信的风格一致 iocn组件的属性: type:类型:string icon的类型: 属性值:success:成功 带背景的 success_no_c ...
- centos7安装kafka
1.官网或 wget 下载 kafka_2.12-2.2.0.tgz 二进制代码包 cd /home/tar wget http://mirror.bit.edu.cn/apache/kafka/2. ...