正题

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


题目大意

nnn个点mmm条边的一张无向图,求删除sss以外的一个点改变sss到最多点的最短路。


解题思路

挺裸的一道题的,首先肯定要跑一遍最短路搞出最短路树。

然后如果最短路树上sss到某个点的路径被割掉了就会改变最短路长度,所以直接求出支配树然后看除了根以外最大子树的子节点就好了。

时间复杂度O(mlog⁡n)O(m\log n)O(mlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define mp(x,y) make_pair(x,y)
using namespace std;
const ll N=3e5+10,T=19;
priority_queue<pair<ll,ll>> q;
struct node{ll to,next,w;
}a[N*2];
ll n,m,s,tot,ls[N],dis[N],dep[N],v[N];
ll head,tail,top[N],f[N][T+1],siz[N];
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
void dij(){memset(dis,0x3f,sizeof(dis));dis[s]=0;q.push(mp(0,s));while(!q.empty()){ll x=q.top().second;q.pop();if(v[x])continue;v[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(dis[x]+a[i].w<dis[y]){dis[y]=dis[x]+a[i].w;q.push(mp(-dis[y],y));}}}return;
}
ll LCA(ll x,ll y){if(dep[x]>dep[y])swap(x,y);for(ll i=T;i>=0;i--)if(dep[f[y][i]]>=dep[x])y=f[y][i];if(x==y)return x;for(ll i=T;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
void build(){head=1;tail=1;top[1]=s;memset(v,0,sizeof(v));for(ll x=1;x<=n;x++)for(ll i=ls[x];i;i=a[i].next)if(dis[x]+a[i].w==dis[a[i].to])v[a[i].to]++;while(head<=tail){ll x=top[head++];dep[x]=dep[f[x][0]]+1;for(ll i=1;i<=T;i++)f[x][i]=f[f[x][i-1]][i-1];for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(dis[x]+a[i].w!=dis[y])continue;v[y]--;if(!f[y][0])f[y][0]=x;else f[y][0]=LCA(f[y][0],x);if(!v[y])top[++tail]=y;}}return;
}
signed main()
{scanf("%lld%lld%lld",&n,&m,&s);for(ll i=1;i<=m;i++){ll x,y,w;scanf("%lld%lld%lld",&x,&y,&w);addl(x,y,w);addl(y,x,w);}dij();build();ll ans=0;for(ll i=tail;i>1;i--){siz[top[i]]++,siz[f[top[i]][0]]+=siz[top[i]];ans=max(ans,siz[top[i]]);}printf("%lld\n",ans);
}

CF757F-Team Rocket Rises Again【最短路,DAG支配树】相关推荐

  1. Codeforces 757F: Team Rocket Rises Again(支配树)

    Description 2017新年到!Bash小朋友想给他的好友们送礼物.在他的国家里,有 n 座城市和 m 条双向道路(这里保证这 n 座城市是联通的).Bash住在城市 s 中.对于每个城市(包 ...

  2. P2597-[ZJOI2012]灾难【DAG支配树】

    正题 题目链接:https://www.luogu.com.cn/problem/P2597 题目大意 nnn个点的一张DAGDAGDAG,对于每个点xxx求有多少点yyy满足从yyy出发到达某个出度 ...

  3. Gym - 101986F Pizza Delivery(最短路+DAG必经边)

    题目链接:点击查看 题目大意:给出一个n个点m条边的有向无环图,每条边的权重为w,起点为1,终点为2,现在对每一条边询问: 若将该边的方向取反,权值不变,则对最短路有无影响,分为三种情况讨论: 若最短 ...

  4. 【学习笔记】DAG / 一般有向图的支配树 / 灭绝树

    定义与声明 一个有向图 GGG.给定一个起点 sss,假设 sss 能到达所有点. 若去掉某个点 iii 后,sss 无法到达 jjj,则称 iii 为 jjj 的支配点. 显然支配点存在传递关系. ...

  5. 【NOIP2017】逛公园【最短路DAG】【dp】【拓扑排序】

    题意:给一张帯权有向图,求 111 到 nnn 长度不超过最短路长度 +k+k+k 的路径条数 模 PPP.有无数条输出 −1-1−1 . n≤105,m≤2×105,k≤50n\leq 10^5,m ...

  6. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

  7. 图论 ---- F. The Shortest Statement (最短路的性质 + 任意两点间最短路 + 图转树)

    题目链接 题目大意: 给你一个nnn个点mmm条边的无向图,就是动态询问任意两点间的最短路 n,m∈[1,1e5],m−n≤20n,m\in[1,1e5],m-n\leq20n,m∈[1,1e5],m ...

  8. [BZOJ2125]最短路(圆方树DP)

    题意:仙人掌图最短路. 算法:圆方树DP,$O(n\log n+Q\log n)$ 首先建出仙人掌圆方树(与点双圆方树的区别在于直接连割边,也就是存在圆圆边),然后考虑点u-v的最短路径,显然就是:在 ...

  9. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

最新文章

  1. 21 岁理工男开源的这个编辑器火了!
  2. python可视化分析网易云音乐评论_网易云音乐热门评论api分析
  3. 电子书链接的集合 (不断更新)
  4. 【Okio】Okio 简单入门
  5. 设计趋势:液态渐变色彩背景
  6. 使用 json 进行神经网络结构信息的格式化 (dump load)
  7. position:fixed 失效
  8. 概率论与数理统计-课程感悟
  9. zhuti——志玲娇情win7美女主题
  10. 探索汽车行业大数据应用
  11. 2015人生感悟哲理
  12. 用Python求三角形面积
  13. python常见的缩进错误_python常见编译错误:IndentationError缩进错误
  14. apicloud的使用
  15. List of colors (from wikipedia)
  16. 对扫描出的图片进行纠偏
  17. 寻找技术中国——渴望不再被扼住喉咙!
  18. (转)百万年薪的人才泡沫与人工智能的虚假繁荣
  19. SAP BAdI 深度解读
  20. 技嘉1080显卡体质测试软件,技嘉GTX1080 Xtreme Gaming显卡评测:创新的重峦式三风扇...

热门文章

  1. 初二物理模型有哪些_初二是成绩下滑的高危期,做好这5点成绩涨涨涨!(附全学科提升技巧,家长转给孩子!)...
  2. centos7python命令_02.将python3作为centos7的默认python命令
  3. linux c 数据库访问框架,linux c 开发通用结构,框架
  4. jsp需要多少java基础_Java基础——JSP(一)
  5. 普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...
  6. [JavaWeb-HTML]HTML标签_语义化标签
  7. C++ 实现分块查找(顺序存储结构)(完整代码)
  8. C++string容器-字符存取
  9. C++vector容器-预留空间
  10. 2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)