2018.10.27-dtoj-3996-Lesson5!(johnny)

2024-02-06 16:59
文章标签 27 johnny lesson5 2018.10 dtoj 3996

本文主要是介绍2018.10.27-dtoj-3996-Lesson5!(johnny),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

“最短的捷径就是绕远路,绕远路就是我最短的捷径”
转眼就Stage X 了,Stage X 的比赛路线可以看做一个n 个点m 条边的有向无环图,
每条边长度都是1。杰洛·齐贝林会选择走最长的那一条路径。
迪亚哥·布兰度决定摧毁一个城市以及所有关于该城市的边,由于变成恐龙后脑子有
点问题,他想要让摧毁后的Stage 最长路径最短,他想知道要摧毁哪个城市,及摧毁后
最长路径的长度,如果有多个城市答案相同,则输出编号最小的那一个。

输入:

本题包含多组数据,输入第一行一个整数T 代表数据组数
每组数据第一行两个整数n,m 表示点数,边数。
每组数据第2~m+1 行每行两个整数xi,yi 表示有一条连接xi,yi 的边。

输出:

对于每组数据,输出一行两个整数,表示删除的城市编号及删除该城市后最长
路径的长度。

数据范围:

对于所有数据,满足T≤10,1≤n≤100000,0≤m≤500000。

算法标签:拓扑+线段树(stl优先队列维护会被卡成80)

思路:

经过每一个点的最长路径可以表示成我的入度经过的走到我的最远距离,走出我的最远距离,于是根据拓扑序,每次把点模拟成一堆在s集合按拓扑序移动到t集合,维护其中的最长线段,用线段树维护。

以下代码:
#include<bits/stdc++.h>
#define il inline
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=1e5+5,M=5e5+5;
int ans,m,n,head[2][N],ne[M<<1],to[M<<1],cnt,out[N],q[N],r,l,in[N];
int f[N],g[N],id,maxn[N<<2],c[N];char ch;
int read(){int x;_(!);x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return x;}
il void insert(int op,int x,int y){ne[++cnt]=head[op][x];head[op][x]=cnt;to[cnt]=y;}
il void ins(int x,int l,int r,int pos,int v){if(l==r){c[l]+=v;if(c[l]>0)maxn[x]=l;else c[l]=0,maxn[x]=-1;return;}int mid=(l+r)>>1;if(pos<=mid)ins(x<<1,l,mid,pos,v);else ins(x<<1|1,mid+1,r,pos,v);maxn[x]=max(maxn[x<<1],maxn[x<<1|1]);
}
int main()
{int T=read();while(T--){n=read();m=read();ans=n;l=0;r=0;id=1;for(int i=1;i<=n;i++)head[0][i]=head[1][i]=0,out[i]=f[i]=g[i]=c[i]=in[i]=0;cnt=0;for(int i=1;i<=(n<<2);i++)maxn[i]=0;while(m--){int x,y;x=read();y=read();insert(0,x,y);insert(1,y,x);in[y]++;out[x]++;}for(int i=1;i<=n;i++)if(!out[i])q[++r]=i;while(l<r){int x=q[++l];for(int i=head[1][x];i;i=ne[i]){if(g[to[i]]<g[x]+1)g[to[i]]=g[x]+1;if(--out[to[i]]==0)q[++r]=to[i];}}l=0;r=0;for(int i=1;i<=n;i++)if(!in[i])q[++r]=i;while(l<r){int x=q[++l];for(int i=head[0][x];i;i=ne[i]){if(f[to[i]]<f[x]+1)f[to[i]]=f[x]+1;if(--in[to[i]]==0)q[++r]=to[i];}}for(int i=1;i<=n;i++)ins(1,0,n,g[i],1);for(int i=1;i<=n;i++){int x=q[i];for(int j=head[1][x];j;j=ne[j])ins(1,0,n,f[to[j]]+1+g[x],-1);ins(1,0,n,g[x],-1);if(maxn[1]<ans||(ans==maxn[1]&&q[i]<id))ans=maxn[1],id=q[i];for(int j=head[0][x];j;j=ne[j])ins(1,0,n,f[x]+1+g[to[j]],1);ins(1,0,n,f[x],1);}printf("%d %d\n",id,ans);}   return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Jessie-/p/9861544.html

这篇关于2018.10.27-dtoj-3996-Lesson5!(johnny)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684972

相关文章

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

27. Remove Elements

题目: 解答: 类似题26,注意下删除后的元素的移动方式即可 代码: class Solution {public:int removeElement(vector<int>& nums, int val) {if(nums.empty()) return 0;int len = nums.size();int lenafter = 0, head = 0;for(int i

【VB6|第27期】如何在VB6中使用Shell函数实现同步执行

日期:2024年9月1日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 文

日记 01/27/2016.

有机会再看看这个: https://www.zhihu.com/question/27578379 想拿高package,多去拿几个offer再来谈,特别是hot startup的package,往往拿来要挟大公司的HR很好用。 最近在学习Angular JS,自己一定要坚持下来。然后把前端的知识补上。 打算Aug的时候,然后把Princeton的算法课上了,重新充电,然后把

设计模式27-设计模式的总结

设计模式的总结 一个目标:管理变化,提高复用两种手段分解抽象 八大原则重构技法C++对象模型什么时候不适用模式经验之谈设计模式的成长之路 一个目标:管理变化,提高复用 两种手段 分解 分解事务,归类事务,那些是变化的那些是不变的。 抽象 抽象出接口,变化点 八大原则 依赖倒置原则开闭封闭原则单一职责原则Liskov替换原则接口隔离原则面向对象优先使用对象组合,而不是类

【软件逆向】第27课,软件逆向安全工程师之(二)寄存器寻址,每天5分钟学习逆向吧!

寄存器寻址是汇编语言中的一种寻址方式,在这种方式中,操作数位于CPU的寄存器中。寄存器是CPU内部的高速存储位置,用于快速访问数据。以下是关于寄存器寻址的详细信息: 寄存器寻址的特点: 操作数在寄存器中:数据直接存储在寄存器中,而不是内存地址或立即数。快速访问:由于寄存器位于CPU内部,因此访问速度远快于内存。指令简短:使用寄存器寻址的指令通常较短,因为不需要指定内存地址。 识别寄存器寻址:

微软苏州校招笔试 12月27日

题目1 : Lost in the City 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 Little Hi gets lost in the city. He does not know where he is. He does not know which direction is north. Fortunately

项目实训:创建一张贺卡以及一只盒子——WEB开发系列27

以下是两道关于基础 CSS 盒模型和其他盒子相关特性的练习题,适合测试对这些概念的掌握程度,通过实际的设计任务来深入理解这些概念。 练习题 1: 设计一张中秋节海报贺卡 任务描述 制作一张精美的中秋节海报贺卡,用于庆祝这个传统节日。你的目标是应用 CSS 盒模型的各种属性来创建一个视觉上吸引人的海报,包括边距(margin)、边框(border)、内边距(padding)和内容区域(co

leetcode 27: 移除元素

int removeElement(vector<int>& nums, int val) {int n=nums.size();if(n==0)return 0;for(int i=0;i<n-1;){if(nums[i]==val){for(int j=i+1;j<n;j++)nums[j-1]=nums[j];n--;}if(nums[i]!=val)i++;}if(nums[nums.

【JPCS独立出版】第四届电气工程与计算机技术国际学术会议(ICEECT 2024,9月27-29)

第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举办。 会议主要围绕"电路与系统"、“电气工程材料”、“计算机视觉”、“计算机技术”等专业研究领域展开讨论。旨在为气工程、计算机技术等领域的专家学者及企业发展人提供一个分享研究成果、讨论存在的问题与挑战、探索前沿科技的国际性合作交流平台。大会诚邀国内外高校、科研机构专家、学者,企业界人士及其他相关人员