题目传送门

前置知识

强连通分量 | 最短路

解法

考虑用 Tarjan 进行缩点,然后跑最短路。

  • 缩点:本题的缩点有些特殊,基于有向图缩点修改而得,因为是无向图,所以在 Tarjan 过程中要额外记录一下从何处转移过来,防止在同一处一直循环。

  • 最短路:因为缩完点后就形成了一棵树,且因为是无向图,环外任意一点到环上最短距离等同于环上到环外任意一点最短距离,所以接着以环缩成的点为起点跑单源最短路或 DFS 或 LCA 求解即可。本篇题解使用 Dijkstra 算法求单源最短路。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort stable_sort
#define endl '\n'
struct node
{
int nxt,to,w;
}e[10000];
int head[10000],u[10000],v[10000],dfn[10000],low[10000],ins[10000],c[10000],dis[10000],vis[10000],cnt=0,tot=0,ans=0,scc=0,rt=0;
stack<int>s;
void add(int u,int v)
{
cnt++;
e[cnt].nxt=head[u];
e[cnt].to=v;
e[cnt].w=1;
head[u]=cnt;
}
void tarjan(int x,int fa)
{
int i,k=0;
tot++;
dfn[x]=low[x]=tot;
ins[x]=1;
s.push(x);
for(i=head[x];i!=0;i=e[i].nxt)
{
if(e[i].to!=fa)
{
if(dfn[e[i].to]==0)
{
tarjan(e[i].to,x);
low[x]=min(low[x],low[e[i].to]);
}
else
{
if(ins[e[i].to]==1)
{
low[x]=min(low[x],dfn[e[i].to]);
}
}
}
}
if(dfn[x]==low[x])
{
ans++;
scc=0;
while(x!=k)
{
k=s.top();
ins[k]=0;
c[k]=ans;
scc++;
s.pop();
}
if(scc>=2)
{
rt=ans;
}
}
}
void dijkstra(int s)
{
int x,i;
priority_queue<pair<int,int> >q;
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push(make_pair(0,-s));
while(q.empty()==0)
{
x=-q.top().second;
q.pop();
if(vis[x]==0)
{
vis[x]=1;
for(i=head[x];i!=0;i=e[i].nxt)
{
if(dis[e[i].to]>dis[x]+e[i].w)
{
dis[e[i].to]=dis[x]+e[i].w;
q.push(make_pair(-dis[e[i].to],-e[i].to));
}
}
}
}
}
int main()
{
int n,i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>u[i]>>v[i];
add(u[i],v[i]);
add(v[i],u[i]);
}
for(i=1;i<=n;i++)
{
if(dfn[i]==0)
{
tarjan(i,0);
}
}
cnt=0;
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
for(i=1;i<=n;i++)
{
if(c[u[i]]!=c[v[i]])
{
add(c[u[i]],c[v[i]]);
add(c[v[i]],c[u[i]]);
}
}
dijkstra(rt);
for(i=1;i<=n;i++)
{
cout<<dis[c[i]]<<" ";
}
return 0;
}

后记

推销一下自己的 Tarjan 学习笔记

CF131D Subway 题解的更多相关文章

  1. 【CF131D】Subway

    题目大意:给定一棵 N 个节点的基环树,求各个点到环的最小距离. 题解:除了找环的必须参数之外,对每个点维护一个 fa 即可. 代码如下 #include <bits/stdc++.h> ...

  2. 2016 Multi-University Training Contest 1 J.Subway

    Subway Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  3. 【POJ】【1635】Subway Tree Systems

    树的最小表示法 给定两个有根树的dfs序,问这两棵树是否同构 题解:http://blog.sina.com.cn/s/blog_a4c6b95201017tlz.html 题目要求判断两棵树是否是同 ...

  4. POJ 2502 Subway (最短路)

    Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...

  5. buaacoding_2018算法期末上机G题.地铁建设题解

    // 标注:本文旨在为博主确立一种题解的基本范式,以避免博主的题解流于AC代码的粘贴.此基本范式为:完整而简洁明了的思路及其推导说明,力图触及问题的本质并衍生对同类问题的思路分析,使得题解具有泛用性, ...

  6. Subway Pursuit (二分)(交互题)

    题目来源:codeforces1039B Subway Pursuit 题目大意: 在1到n里有一个运动的点,要求找到这个点,每次可以查询一个区间内有没有这个点,每次这个点往左或者往右移动1到k个位置 ...

  7. POJ2502:Subway(最短路)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14634   Accepted: 4718 题目链接:http ...

  8. kuangbin带你飞 最短路 题解

    求一个图最短路边的办法.好像下面的那个有问题.单向边和双向边一定是有区别的.这个比较容易.参照该文的最短路网络流题目和连通图题目一题求最短路关节边 另外上述2个题目的代码好像有问题. 在UVALIVE ...

  9. Codeforces Beta Round #95 (Div. 2) D. Subway 边双联通+spfa

    D. Subway   A subway scheme, classic for all Berland cities is represented by a set of n stations co ...

  10. L - Subway(最短路spfa)

    L - Subway(最短路spfa) You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. In ...

随机推荐

  1. 继承 封装 多态 java的三大特性

    import java.util.Scanner;class A{ int ivar = 7; void m1(){ System.out.print("A's m1, "); } ...

  2. 基于python的药店药品信息管理系统-毕业设计-课程设计

    基于python+django+vue.js开发的药店信息管理系统 功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发. 功能包括:药品管理.分类 ...

  3. 分享Go书籍-《Go Web编程》

    大家好,我是沙漠尽头的狼. 最近几天在看一本Go的书籍,看了100来页,感觉不错,分享给大家​.​ 书籍基本信息 书籍信息: 书名:Go Web编程 作 者:(新加坡)郑兆雄(Sau Sheong C ...

  4. 码农的转型之路-IoTBrowser(物联网浏览器)雏形上线

    消失了半个月闭门造轮子去了,最近干了几件大事: 1.工控盒子,win10系统长时间跑物联网服务测试.运行快2周了,稳定性效果还满意,除了windows自动更新重启了一次. 2 .接触了一些新概念MQT ...

  5. [转帖]Oracle数据库中ITL详解

    首先说明这篇文章是转载的,原文地址:http://blog.sina.com.cn/s/blog_616b428f0100lwvq.html 1.什么是ITL ITL(Interested Trans ...

  6. [粘贴]TiDB Lightning 断点续传

    https://www.bookstack.cn/read/tidb-6.1-zh/tidb-lightning-tidb-lightning-checkpoints.md 大量的数据导入一般耗时数小 ...

  7. [转帖]关系模型到 Key-Value 模型的映射

    https://cn.pingcap.com/blog/tidb-internal-2 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以 ...

  8. [转帖]金仓数据库KWR使用说明

    金仓数据库KWR使用说明 1.KWR性能报告介绍 2.部署KWR性能报告功能 2.1.修改配置文件 2.2.使配置文件中参数生效 2.3.创建KWR扩展 3.使用KWR快照功能 3.1.创建KWR快照 ...

  9. [转帖]Datadog 能成为最大的云监控厂商吗

    https://xie.infoq.cn/article/901cfd6b284e3e103ac70aeb3 作者:睿象云 2021-03-25 本文字数:2256 字 阅读完需:约 7 分钟   D ...

  10. [转帖]Linux文件夹对比并提取的差分文件技巧-rsync的妙用

    https://www.xitongjiaocheng.com/linux/2017/45720.html   需求 最近团队正在开发一个版本对比工具,要求是把A1文件夹与A2对比,将A2中的增量部分 ...