864F(tarjan思想)

Screenshot_2026-11-03-16-23-09-34.jpg 立即下载
F. Cities Excursions
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

There are n cities in Berland. Some pairs of them are connected with m directed roads. One can use only these roads to move from one city to another. There are no roads that connect a city to itself. For each pair of cities (x, y) there is at most one road from x to y.

A path from city s to city t is a sequence of cities p1, p2, ... , pk, where p1 = s, pk = t, and there is a road from city pi to city pi + 1 for each i from 1 to k - 1. The path can pass multiple times through each city except t. It can't pass through t more than once.

A path p from s to t is ideal if it is the lexicographically minimal such path. In other words, p is ideal path from s to t if for any other path qfrom s to t pi < qi, where i is the minimum integer such that pi ≠ qi.

There is a tourist agency in the country that offers q unusual excursions: the j-th excursion starts at city sj and ends in city tj.

For each pair sj, tj help the agency to study the ideal path from sj to tj. Note that it is possible that there is no ideal path from sj to tj. This is possible due to two reasons:

  • there is no path from sj to tj;
  • there are paths from sj to tj, but for every such path p there is another path q from sj to tj, such that pi > qi, where i is the minimum integer for which pi ≠ qi.

The agency would like to know for the ideal path from sj to tj the kj-th city in that path (on the way from sj to tj).

For each triple sj, tj, kj (1 ≤ j ≤ q) find if there is an ideal path from sj to tj and print the kj-th city in that path, if there is any.

Input

The first line contains three integers n, m and q (2 ≤ n ≤ 3000,0 ≤ m ≤ 3000, 1 ≤ q ≤ 4·105) — the number of cities, the number of roads and the number of excursions.

Each of the next m lines contains two integers xi and yi (1 ≤ xi, yi ≤ n, xi ≠ yi), denoting that the i-th road goes from city xi to city yi. All roads are one-directional. There can't be more than one road in each direction between two cities.

Each of the next q lines contains three integers sj, tj and kj (1 ≤ sj, tj ≤ n, sj ≠ tj, 1 ≤ kj ≤ 3000).

Output

In the j-th line print the city that is the kj-th in the ideal path from sj to tj. If there is no ideal path from sj to tj, or the integer kj is greater than the length of this path, print the string '-1' (without quotes) in the j-th line.

Example
input
7 7 5
1 2
2 3
1 3
3 4
4 5
5 3
4 6
1 4 2
2 6 1
1 7 3
1 3 2
1 3 5
output
2
-1
-1
2
-1
解题思路:这题比较巧妙,假设没有环的情况,我们可以直接dfs得到答案复杂度为O(n * n),可以接受,但是现在回出现环的情况,这种情况会导致后面的点都是无解的,这时候我们用tarjan思想就行,我们令low[v]为无穷大,如果出现dfn[v] >= low[v]说明出现了环,这是后面dfs到的点都是无解,反之没有环。我是参考这个人的思路:http://blog.youkuaiyun.com/weixin_37517391/article/details/78105828?locationNum=2&fps=1
#include <bits/stdc++.h>
using namespace std;
const int maxn = 3000 + 10;
int inf = 0x3f3f3f3f;
int n, m, q;
int ans[400010];
int num[maxn];
int Instack[maxn];
int dfn[maxn];
int low[maxn];
int tot;
vector<int> edge[maxn];
struct query{
    int s, t, k, id;
}Query[400010];
vector<int> temp[maxn];
vector<int> S[maxn];
void init()
{
    for(int i = 1; i <= n; i++)
    {
        edge[i].clear();
        S[i].clear();
    }
    memset(ans, -1, sizeof(ans));

}
void dfs(int u, int status, int depth)
{
     dfn[u] = ++tot;
     low[u] = inf;
     Instack[u] = 1;
     num[depth] = u;
     if(status)
     {
         for(int i = 0; i < temp[u].size(); i++)
         {
             int loc = temp[u][i];
             int id = Query[loc].id;
             int kk = Query[loc].k;
             if(kk <= depth) ans[id] = num[kk];
         }
     }
     for(int i = 0; i < edge[u].size(); i++)
     {
         int v = edge[u][i];
         if(dfn[v] == 0)
         {
             dfs(v, status && dfn[u] < low[u], depth + 1);
             low[u] = min(low[u], low[v]);
         }
         else if(Instack[v] == 1)
         {
             low[u] = min(low[u], dfn[v]);
         }
     }
     Instack[u] = 0;
}
int main()
{
    while(~scanf("%d%d%d", &n, &m, &q))
    {
        init();
        int u, v;
        for(int i = 1; i <= m; i++)
        {
            scanf("%d%d", &u, &v);
            edge[u].push_back(v);
        }
        for(int i = 1; i <= n; i++)
        {
            sort(edge[i].begin(), edge[i].end());
        }
        int s, t, k;
        for(int i = 1; i <= q; i++)
        {
            scanf("%d%d%d", &s, &t, &k);
            Query[i].s = s;
            Query[i].t = t;
            Query[i].k = k;
            Query[i].id = i;
            S[s].push_back(i);
        }
        for(int i = 1; i <= n; i++)
        {
            memset(dfn, 0, sizeof(dfn));
            memset(Instack, 0, sizeof(Instack));
            for(int j = 1; j <= n; j++) temp[j].clear();
            for(int j = 0; j < S[i].size(); j++)
            {
                int loc = S[i][j];
                int tt = Query[loc].t;
                temp[tt].push_back(loc);
            }
            tot = 0;
            dfs(i, 1, 1);
        }
        for(int i = 1; i <= q; i++) printf("%d\n", ans[i]);
    }
    return 0;
}



研发流程后端开发工具,提示功能开发效率 后端开发工具 立即下载

相关推荐

机器人具有扰动抑制功能的有限时间基于方位角的领航者-跟随者编队控制(Matlab代码实现)

内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际内容并未涉及该主题的具体技术细节或仿真建模过程。相反,文档实质是一份由科研服务团队发布的跨学科资源目录,集中展示了大量基于Matlab、Simulink、Python、PSCAD等平台实现的科研项目与算法开发案例,涵盖电力系统、无人机路径规划、微电网优化、状态估计、信号处理、车间调度、图像处理、通信技术、雷达追踪、智能优化算法等多个工程技术领域。每个条目以“【】”标注研究主题,并注明“Matlab代码实现”“Python代码实现”等形式,表明其为可提供技术支持与代码资源的服务项目。文档末尾频繁出现“完整资源下载:公众号——荔枝科研社”及百度网盘链接,明确体现出其作为科研辅助服务推广与引流工具的功能属性。; 适合人群:面向电气工程、自动化、控制科学与工程、计算机科学、智能制造、新能源、航空航天、通信工程及相关交叉学科的研究生、高校教师、科研人员及企业研发工程师。; 使用场景及目标:①为科研人员提供课题选题、技术路线设计与算法实现的参考范例;②辅助学生或研究人员完成课程设计、毕业论文、项目仿真与算法复现任务;③作为第三方技术服务团队的能力展示目录,便于潜在客户快速了解其在多领域提供的定制化仿真与算法开发服务范围。; 阅读建议:此文档并非传统意义上的学术论文或技术教程,而是一份高度碎片化、广告性质浓厚的资源索引清单。读者应忽略其误导性的文件名,将其视为一个综合性科研技术服务目录,重点关注自身研究方向相关的条目,并通过文末提供的公众号或网盘链接进一步获取具体代码与资料。同时,需注意甄别资源的技术质量、原创性与适用性,避免盲目依赖外部服务。

codeforces 864 F

有向图,倍增。 思路:参考大佬的题解 倍增思想,比如求s到t的道路,那么先通过反向图dfs出所有可以到达t的节点。(相当于一棵树)如果s不在其中,输出-1.然后先用正向图的边把st数组初始化一下(用字典序最小的一个)。然后把st[t][0]置为n+1.其他剩余点都保持为0.然后在倍增完成后,如果st[ s ][ TOP ] ==n+1说明x最终可以到达t并且继续走到n+1.(2^TOP>3000

樱花满地集于我心,楪舞纷飞祈愿相随 347

科技中介服务机构如何打造高效、可复制的技术交易服务流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

图的连通性问题之tarjan算法

Tarjan算法一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法。 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。 定义dfn(u)为节点u搜索的次序编号,low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号。 当dfn(u)

cax1165 2811

高校技术转移办公室人员如何提升科研成果的市场推广与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 478

最近公共祖先LCA问题(特别是Tarjin算法) 转

【白话系列】最近公共祖先 分类: 白话系列 |2012-11-14 08:07 |274人阅读 【序言】         说到最近公共祖先,应该是树论中一个比较重要的话题吧。一般来说,在遇到求最近公共祖先的时候,会有三种常见的做法:对于简单的模拟题——直接模拟就好了;对于大题目中的求最近公共祖先的小桥段——用tarjan来求,因为好打不容易错;对于特意考察最近公共祖先,并且数

yujiazhen1991的专栏 932

Matlab蒙特卡洛模拟二维伊辛模型相变过程

一、什么是伊辛模型 伊辛(Ising)模型是描述磁系统相变最简单的模型,但模型里自旋之间的相互作用赋予了它奇妙的特性,最有趣的就是对称性破缺。这一模型可以被推广用于研究连续的量子相变、基本粒子超弦理论、动力学临界行为等,甚至被认为可以描述深林火灾、交通拥堵、舆论传播等社会经济现象。 如图,每个格点的方向只有向上或向下两者状态,但临近的自旋之间有相互作用,而且点阵可以是一维、二维、三维、甚至更高维...

http://www.icfgblog.com/ 2万+

强连通性Tarjan算法和LCA

其实tarjan算法提出的思想就是DFS深度优先遍历,在遍历的过程中记录某些变量的值,来解决相关问题,下面两个经典的问题都能通过tarjan的思想去解决。在此表达对Robert Tarjan的崇高敬意。连通基础思想就是通过DFS,在深度优先遍历的过程中,记录每个节点上对应的值,在编程中我们需要记录的每个节点的值有DFN(访问的次序),inStack(是否在栈中,引入的栈是做什么的,下面会演示),LO

selous的专栏 1586

用 OData V2 元数据驱动表格体验:SAP UI5 Smart Table 全面解析

摘要: Smart Table是SAPUI5中基于OData元数据自动生成表格的控件,支持个性化、排序、过滤等高级功能。文章从九个维度深入解析其工作机制:1)通过元数据和注解自动生成列;2)支持多种表格类型;3)关键属性的静态化特性;4)与其他智能控件的协同;5)导航属性和导出的处理;6)响应式设计;7)个性化配置;8)性能优化策略;9)端到端实现案例。Smart Table通过读取OData元数据自动完成表格渲染,大幅减少开发工作量,特别适合企业级应用开发场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 322

一、【vmware虚拟机使用】安装vmware workstations17

本文介绍了VMware Workstation 17的安装与网络配置方法。主要内容包括:通过下载安装包进行标准安装(含许可协议、路径选择等步骤);重点讲解了NAT模式下的网络配置,包括修改子网IP为192.168.2.0网段、设置网关地址和DHCP范围等操作,以避免与主机网络冲突。文章还简要说明了VMware的Hypervisor核心技术原理,包括CPU、内存和存储虚拟化。最后指出完成这些准备工作后,后续将进行CentOS7系统的安装。整个流程配有详细图文说明,适合初学者跟随操作。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2746

最小生成树总结

一.最小生成树问题 给定一张图,图中有许多的节点还有许多长度不同的边将这些点点相互连接,找出连接所有点的最短方式就是最小生成树,可以证明,这样一种最小的情况是不会出现环的,由于所有的无环图都可以看做树,所以成为最小生成树。 二.kruskal算法 顶层思想是分治,选择策略是贪心,实现方法如下:以边为中心,先将所有的边从小到大进行排序,之后依照大小顺序依次选择,如果这条边连接的两个节点是不连通

Coldplay 2004

鸿蒙开发之hdc命令行

hdc(HarmonyOS Device Connector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备进行交互。

xiangzhihong8的专栏 5830

codeforces864F Cities Excursions 图论,tarjan算法的应用

F. Cities Excursions time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There are n cities in Berland. Some pa

SUNSET 805

借助Gemini 3 Pro高效解决课题申报中的五大核心痛点,亲测有效经验分享

之前给大家分享过关于AI辅助课题申报的相关的内容,涵盖了申报书部分撰写技巧,但没针对性拆解各位同仁在实际申报时遇到的卡壳的地方。比如选题范围拿捏不准,定的太大,根本没法落地完成;定的太小,研究价值则体现不了;写综述时,容易单纯罗列文献,缺乏批判性视角,没办法自然融入自己的判断,找不到研究缺口;研究方法部分,可能担心方法设计不够严谨,别人难以复现.....针对这些申报中的高频痛点,接下来七哥会从五个核心要点出发,借助Gemini 3 Pro高效解决这些痛点。

智能AI让学术科研更容易 701

学Simulink——十二脉波整流电路(移相变压器)谐波抵消仿真

Y:Δ = 1:√3(若 DC 同压)— 此处同相电压故 220V(Y)=220V(Δ phase)Y(相电压=220V)、Δ(线电压=380V ⇒ 相=220V,30° 移相)可经 Lbal​=0.5mH(平衡电抗)或直接短(大 L_dc 下均流尚可)✅ 直流输出纹波频率 = 12·f_line(vs 6·f_line)直流输出 → Ldc​=50mH→Cdc​=2200µF→R=30Ω。Line‑Line RMS = 380 V(⇒ 相=220V)Vdc​≈1.35⋅380≈513V(同 6‑脉波)

xiaoheshang_123的博客 59

codeforces864F Cities Excursions

F. Cities Excursionstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThere are n cities in Berland. Some pairs of them are connected with m directe...

qq_41510496的博客 246

【推荐100个unity插件之34】在unity中实现和Live2D虚拟人物的交互——Cubism SDK for Unity

Live2D是一款2D建模的软件,常用于游戏,动态壁纸,虚拟主播,游戏公司里面是有专门的ive2D岗位的。游戏里面还有一个经常使用的软件——spine,他做的也是2d的模型,但是他更适合做一些动作,Live2D更适合人物交互方面。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4997

Codeforces Round 864F (Codeforces Round #436 Div. 2) F. Cities Excursions tarjan判环

F. Cities Excursions time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There are n cities in Berland. Some pa

J. Cole 570

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Codeforces 864F Cities Excursions(离线处理+Tarjan)

F. Cities Excursions time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output There are n cities in Berland. Some pairs of them are connected with

yasolx的博客 856

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

codeforces 864F 图论

题意:n个节点的有向图,无重边,无自环。 对于一条从s->t的路径,除了t其他城市都可以被游览多次。理想路径是一条路径从s到t的字典序最小路径。q次询问,每次给出一个si,tis_i, t_i。问从sis_i到tit_i的字典序最小的路径的第k个节点是什么。 可能不存在从sis_i到tit_i的字典序最小路径,当且仅当有以下两种情况。 1.1.没有从sis_i到tit_i的路径。 2.2.为

即使摸爬滚打,满身泥泞,我也要前进 421

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

cf 864 F. Cities Excursions

F. Cities Excursions There are n cities in Berland. Some pairs of them are connected with m directed roads. One can use only these roads to move from one city to another. There are no roads tha...

weixin_30615767的博客 142

Codeforces Round #436 (Div. 2) F. Cities Excursions 字典序dfs+Tarjan判环

题目链接:Cities Excursions 题意:给你一个有向图,问任意两点间的字典序最小路径(如果存在)上的第k个节点是啥。 解法:提前存储好每个点能直接到达的点,并排序,因为这样遍历就是字典序的遍历。提前存储好q个询问,对q的f按从小到大排序,每次对f相同的询问做dfs,起始点是f,提前把起始点是f的询问用vector保存下来,这样在做dfs的过程中,一次性把具有共同起点的这部分询问给得出

ganzibang 593

套题T6

过节(festival.cpp/c/pas) Dxy帮老师们过教师节的时候需要购买礼物。货架上有n 种礼物,每种礼物有不同的个数。每种礼物有价值和花费两种属性,帮他算出最大可以得到的价值。M是带的钱数有多少 Input: 第一行两个数n,m 第2到n+1行:每行三个数a,b,c,表示一种礼物的个数,花费和价值。 Output: 最大可得价值。 样例输入: 1 1 1...

weixin_34245082的博客 306

Tarjan算法详解

       在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。如下图中,强连通分量有:{1,2,3,4},{5},{6}       Tarjan算法是基于对图深度优先搜索的算法...

刘伟的博客 1万+

求强连通分量的双DFS,Tarjan和Gobow算法详解

1.强连通分量-----双DFS算法 思想:对一个有向图作两遍DFS,第一遍DFS能确定图中每个顶点的DFS完成时间,第二遍DFS从第一遍DFS完成时间的逆序开始遍历,这时得到的一棵棵深度优先搜索树就是一个个对应的强连通分量。 举例: 对于下面这个有向图,我们以C为源节点进行第一遍DFS,可以得到每一个顶点的 (访问时间/完成时间).也就是我们能得到顶点DFS完成时间,逆序为:b->e-

记录每一个小阶段的学习心得,持之以恒! 2296
上一篇: UESTC1722(二分)
下一篇: POJ3436(最大流)
creatorx
博客等级 码龄10年 127粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值