正题

题目链接:https://www.luogu.com.cn/problem/P3573


题目大意

nnn个点mmm条边的DAGDAGDAG,删掉一个点使得最长路最短。


解题思路

先跑一遍拓扑排序
dsids_idsi​表示以iii结尾的最长路,dtidt_idti​表示以iii开头的最长路,用拓扑序+dp可以搞定

定义两个点集SSS和TTT,我们先将所有所有点放入TTT集合,并且把dtdtdt放入一个数据结构里。

然后按照拓扑序枚举从小到大删除哪个点,枚举到的点xxx我们把dtxdt_xdtx​从数据结构里删除,对于y−>xy->xy−>x我们可以把dsy+dtx+1ds_y+dt_x+1dsy​+dtx​+1从数据结构里删除。

然后查询最小值统计答案

之后把dsxds_xdsx​和对于x−>yx->yx−>y我们有dsx+dty+1ds_x+dt_y+1dsx​+dty​+1都丢进数据结构里。

这里用树状数组+二分统计答案。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define lowbit(x) (x&-x)
using namespace std;
const int N=1e6+10;
struct node{int to,next;
}a[N];
queue<int> q;
int n,m,cnt,ans,id;
int in[N],top[N],ds[N],dt[N],ls[N];
vector<int> init[N];
struct Tree_Array{int t[N];void Change(int x,int val){if(!x) return;while(x<=m){t[x]+=val;x+=lowbit(x);}return;}int Ask(int x){int ans=0;while(x){ans+=t[x];x-=lowbit(x);}return ans;}int Maxs(){int z=Ask(m);int l=0,r=m;while(l<=r){int mid=(l+r)>>1;if(Ask(mid)==z)r=mid-1;else l=mid+1;}return l;}
}T;
void Top_Sort(){for(int i=1;i<=n;i++)if(!in[i])q.push(i),top[++cnt]=i;while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;in[y]--;if(!in[y])q.push(y),top[++cnt]=y;}}return;
}
void Get_Dis(){for(int i=1;i<=n;i++){int x=top[i];for(int j=ls[x];j;j=a[j].next){int y=a[j].to;ds[y]=max(ds[y],ds[x]+1);}}for(int i=n;i>=1;i--){int x=top[i];for(int j=0;j<init[x].size();j++){int y=init[x][j];dt[y]=max(dt[y],dt[x]+1);}}return;
}
void Solve(){ans=2147483647;for(int i=1;i<=n;i++)T.Change(dt[i],1);for(int k=1;k<=n;k++){int x=top[k];T.Change(dt[x],-1);for(int i=0;i<init[x].size();i++){int y=init[x][i];T.Change(ds[y]+dt[x]+1,-1);}int z=T.Maxs();if(z<ans) ans=z,id=x;T.Change(ds[x],1);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;T.Change(ds[x]+dt[y]+1,1);}}return;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);a[i].to=y;a[i].next=ls[x];ls[x]=i;in[y]++;init[y].push_back(x);}Top_Sort();Get_Dis();Solve();printf("%d %d",id,ans);
}

P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】相关推荐

  1. 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组

    题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...

  2. jzoj4050-寻宝游戏【二分,树状数组,LCA】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3017/1 题目大意 nnn个点的一棵树,mmm次操作,修改一个地方的宝藏. 每次操作后求拿完所以宝藏并回 ...

  3. bzoj4418 [Shoi2013]扇形面积并 扫描线+二分+树状数组

    Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 对于100%的数据,1≤n≤105, 1≤m≤106,1≤k≤5000,1≤ri≤105,-m≤a1,a2≤m Sol ...

  4. 【BZOJ2738】矩阵乘法 [整体二分][树状数组]

    矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵 ...

  5. hdu-5493 Queue(二分+树状数组)

    题目链接: Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  6. HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的无向图,每个点都有一个权值,现在需要执行 q 次操作,每次操作分为两种类型: 1 pos val :将第 pos 个点的权值修改为 val ...

  7. P3527 [POI2011]MET-Meteors 整体二分 + 树状数组

    洛谷 题意: 思路: 考虑整体二分前,一定要思考一下直接二分怎么做.显然对每个城市,当<pos<pos<pos的时候收集不够足够的陨石,>=pos>=pos>=po ...

  8. P3527-[POI2011]MET-Meteors【整体二分,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P3527 题目大意 mmm个格子形成的环,有nnn个集合,第iii个格子属于第oio_ioi​个集合,kkk次让环上 ...

  9. ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

最新文章

  1. Linux与云计算——第二阶段Linux服务器架设 第八章:FTP服务器架设—安装配置FTP服务和客户端配置...
  2. Android Log等级的介绍
  3. oracle的cv函数,cv_wait 和 cv_timedwait 函数
  4. 分布式监控系统开发【day38】:监控数据如何画图(九)
  5. 怎么改变表单option标签直接字体大小_不起眼却非常重要的表单交互
  6. 精通ASP.NET MVC ——路由
  7. 小程序版本独立微信社群人脉系统社群空间站源码全开源
  8. SHLVL 和 BASH_SUBSHELL 两个变量的区别
  9. Excel2007中插入页眉和页脚
  10. 电工模拟接线软件 app_电气接线方法以及线号管正确方向
  11. LaTeX函数、符号及特殊字符
  12. 删除ttf字体文件中无用文字
  13. 说话没技巧,母猪都嫌吵!
  14. C语言用梯形法求定积分
  15. C# Access数据库操作
  16. Weakly Supervised Semantic Segmentation list
  17. jsp依据id元素值获取值及相关赋值
  18. 侧边栏如何展开与收起
  19. c# 计算圆锥的体积_用C#编写一个程序计算出球,圆柱和圆锥的表面积和体积。...
  20. 谷粒商城三阶段课件_北京版初中化学九年级上册第三节 氧气的性质公开课优质课课件教案视频...

热门文章

  1. js请求结果拦截机器_CefSharp请求资源拦截及自定义处理
  2. 650c公路车推荐_2020最具性价比的中高端公路整车盘点
  3. android loading封装_我们经常用的Loading动画居然还有这种姿势
  4. c#物联网_C# 基础知识系列- 16 开发工具篇
  5. MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗
  6. 自动备份html文件,windows下定期自动备份本地文件(文件夹)
  7. php+换行+php+eol,PHP PHP_EOL 换行符
  8. cmake编译opencv3.0
  9. Java多线程的4种实现方式
  10. 2019-02-23-算法-进化