lbn是战忽中心——一个绝密的军事组织的一个军官,今天他接到了一个紧急任务:调查敌国X国某些城市的经济情况。
X国有N个城市,由M条单向道路连接,其中S城是X国的首都。
每个城市i有一个发达指数a[i],我们定义城市i的经济状况为首都S到城市i任意一条路径上两个不同的城市x,y的a[x] mod a[y]的最大值。(x和y必须在同一条路径上,x,y可以是i或者S)

lbn当然能轻松地完成这个任务,但他想考考你。

样例解释:
首都为2
2到1只有一条路径,城市1的经济情况为a[2] mod a[1]=23
对于城市3的经济状况,我们可以选择路径2->4->3,并选择城市3 4,经济状况为a[3] mod a[4]=37,可以发现这是最大值。
对于城市4的经济状况,我们可以选择路径2->3->4,并选择城市3 4,经济状况为a[3] mod a[4]=37,可以发现这是最大值。

一个点可以被经过多次!

使用C++的选手请注意:
如果DFS爆栈请使用Visual C++编译,并在开头加上

1

#pragma comment(linker, "/STACK:10240000,10240000") 

数据已加强

Input
第一行四个正整数N,M,Q,S
分别表示X国城市数量,城市间有向边的数量,需要调查的城市的数目和首都的编号。每个城市的标号为1到N
第二行N个正整数,其中第i个整数表示a[i]。
第2至M+1行每行两个正整数x,y。表示有一条从城市x到y有向边。
第M+2行Q个正整数,表示需要调查的城市的数目的编号。
数据保证无重边无自环,不会查询首都。

1<=N,Q<=4*10^5
1<=M<=2*10^6
1<=a[i]<=10^9
Output
共一行Q个整数,按询问顺序输出每个城市的经济情况。
如果一个城市不存在任何一条从首都来的路径,则其经济情况输出-1。
Input示例
4 5 3 2
98 23 37 100
2 1
2 4
2 3
3 4
4 3
1 3 4
Output示例
23 37 37

题解
使模最大就是找某条路径上的严格次大值,由于一个点可以通过多次,那门可以tarjan缩点,处理出每个联通快的最大值与次小值,剩下就是在DAG图上bfs计算答案。(注意次小值需在最大值路径上)

代码

#include<bits/stdc++.h>
#define mod 998244353
#define inv 499122177
#define M 2000005
typedef __float128 F;
typedef long long ll;
using namespace std;
inline int read()
{int x=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x;
}
int cnt,tot,ret[M],Next[M],E1[400005],E2[400005],Head[400005];
struct node{int to,next,from,pre;}e[M];
int N,n,m,Q,S,bl[400005],stk[400005],top;
int low[400005],dfn[400005],tim,a[400005];
bool inq[400005],flag[400005],vis[400005];
int mx1[400005],mx2[400005],du[400005],mx3[400005];
inline void ins(int u,int v){ret[++tot]=v;Next[tot]=Head[u];Head[u]=tot;}
void update(int x,int t)
{if (x==mx1[t]||x==mx2[t]) return;if (x>mx1[t]){mx2[t]=mx1[t];mx1[t]=x;}else if (x>mx2[t]&&x!=mx1[t]){mx2[t]=x;}
}
void tarjan(int now)
{low[now]=dfn[now]=++tim;stk[++top]=now;inq[now]=1;for (int i=Head[now];i;i=Next[i])if (!dfn[ret[i]]){tarjan(ret[i]);low[now]=min(low[now],low[ret[i]]);}else if (inq[ret[i]]) low[now]=min(low[now],low[ret[i]]);if (low[now]==dfn[now]){N++;while (stk[top+1]!=now){bl[stk[top]]=N;update(a[stk[top]],N);inq[stk[top]]=0;top--;}}
}
void insert(int u,int v)
{e[++cnt].to=v;e[cnt].from=u;e[cnt].pre=E2[v];e[cnt].next=E1[u];E1[u]=cnt;E2[v]=cnt;
}
void bfs()
{queue<int>q;q.push(bl[S]);vis[bl[S]]=1;while (!q.empty()){int now=q.front();q.pop();flag[now]=1;for (int i=E1[now];i;i=e[i].next){du[e[i].to]++;if (vis[e[i].to]) continue;vis[e[i].to]=1;q.push(e[i].to);}}q.push(bl[S]);while (!q.empty()){int u=q.front();q.pop();for (int i=E2[u];i;i=e[i].pre){int v=e[i].from;if (!flag[v]) continue;if (mx1[v]>mx1[u]){mx3[u]=mx1[u];mx1[u]=mx1[v];}else if (mx1[v]<mx1[u]&&mx1[v]>mx3[u]) mx3[u]=mx1[v];if (mx3[v]>mx1[u]){mx3[u]=mx1[u];mx1[u]=mx3[v];}else if (mx3[v]<mx1[u]&&mx3[v]>mx3[u])mx3[u]=mx3[v];}for (int i=E1[u];i;i=e[i].next){int v=e[i].to;if (!flag[v]) continue;mx2[v]=max(mx2[v],mx2[u]);if (mx1[u]!=mx1[v])mx2[v]=max(mx2[v],min(mx1[u],mx1[v]));else mx2[v]=max(mx2[v],max(mx3[u],mx3[v]));du[e[i].to]--;if (du[e[i].to]==0) q.push(e[i].to);}}
}
int main()
{freopen("1.in","r",stdin);freopen("test.out","w",stdout);n=read();m=read();Q=read();S=read();for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=m;i++){int u=read(),v=read();ins(u,v);}for (int i=1;i<=n;i++) if (!dfn[i]) tarjan(i);for (int i=1;i<=n;i++)for (int j=Head[i];j;j=Next[j])if (bl[i]!=bl[ret[j]]) insert(bl[i],bl[ret[j]]);for (int i=1;i<=N;i++) mx3[i]=mx2[i];bfs();while (Q--){int x=read();if (!flag[bl[x]]) printf("-1 ");else printf("%d ",mx2[bl[x]]);}return 0;
}

【51Nod1815】调查任务相关推荐

  1. 51nod1815:调查任务(强连通 dp)^

    1815 调查任务  基准时间限制:4 秒 空间限制:524288 KB 分值: 80 难度:5级算法题  收藏  关注 lbn是战忽中心--一个绝密的军事组织的一个军官,今天他接到了一个紧急任务:调 ...

  2. 2022-2028年中国抗盐粘土行业发展现状调查及前景战略分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国抗盐粘土行业市场行业相关概述.中国抗盐粘 ...

  3. 2022-2028年中国BOPET薄膜行业市场全景调查及投资前景预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了BOPET薄膜行业相关概述.中国BOPET薄膜行业运行环境.分析了中 ...

  4. 镜头评价指标及测试方法(三)--------测量原理及3D相机调查

    1.测量原理: 1.1.通过红外结构光(Structured Light)来测量像素距离,如Kinect1.Project Tango1.Intel Realsense等: 通过近红外激光器,将具有一 ...

  5. 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度

    第三次全国土地调查(国土三调)已进入实地举证核查的攻坚阶段,大疆无人机解决方案正在辅助各地进行外业图斑举证工作.从导入图斑.自动规划航线,到举证拍摄.成果 DB 包生成.上传国土调查云平台,一体化工作 ...

  6. 开源 免费 java CMS - FreeCMS1.2-功能说明-网上调查

    2019独角兽企业重金招聘Python工程师标准>>> 下载地址:http://code.google.com/p/freecms/ 网上调查 从FreeCMS 1.2 开始支持 A ...

  7. vs2017数据可视化建模_介绍数据可视化社区调查2017

    vs2017数据可视化建模 by lars verspohl 由拉斯·韦斯波尔 介绍数据可视化社区调查2017 (Introducing the Data Visualization Communit ...

  8. 2014 年美国程序员薪资调查

    Drdobbs 近期向 2,200 名美国的程序开发人员做了一次调查,调查显示高薪领域的工资随着经济的增长而增长. "Software Engineer"这个职位,除了在德州和几个 ...

  9. 调查:“AI红娘”来了,有一半人选择相信TA

    作者:REN 来源:数据实战派 七夕 AI红娘来了 前言 你会相信人工智能(AI)给你推荐的约会对象吗? 最近,卡巴斯基的一项全球调查显示,在使用交友或约会软件时, 44% 的受访者愿意接受 AI 或 ...

最新文章

  1. Test on 11/10/2016
  2. Linux多进程开发(三)进程创建之守护进程的学习
  3. 2018-2019-2 20165315《网络攻防技术》Exp6 信息搜集与漏洞扫描
  4. mysql索引失效_导致MySQL索引失效的几种常见写法
  5. 数据库面试题【一、事务四大特性】
  6. 将WebApiTestClient添加到ASP.NET Web API帮助页面
  7. PHP面向对象相关特性
  8. 二开微信表情包小程序魔改版源码
  9. 【STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)
  10. python能做什么毕业设计-有没有适合python做的毕设题目,现在不知道做什么了?...
  11. android数据绑定_Android RecyclerView数据绑定
  12. 决策树(二)--C4.5
  13. Java期末设计(十三周)
  14. Pycharm中文设置教程
  15. Android 自定义View(一)实现时钟表盘效果
  16. PNG图片格式及隐写
  17. NAT(地址转换模式)
  18. 内存优化之一——内存优化工具参数详解
  19. 重现CD情怀——飞利浦复古桌面音响臻选上市
  20. 绝世唐门漫画的王秋儿

热门文章

  1. 【电脑一点通】如何开启Windows夜间模式
  2. C++之static,静态变量
  3. 基于华为MDC的上汽通用五菱新宝骏KiWi自动驾驶
  4. MDK5(keil5)源文件列表中黄色的钥匙标识
  5. 2016百度之星 - 资格赛(Astar Round1)Problem A
  6. C#各个文件后缀含义
  7. python语句print(chr(65))的运行结果_Python语句print(hello 'world')的执行结果是
  8. 一本你必须知道的.net
  9. 为什么不用红外图片做人脸识别
  10. SQL中union的常用用法~~解决数据拼凑、表中两列合并等问题