BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
Description
Input
Output
Sample Input
1 6 7 8
1 2 1
2 5 2
2 3 3
3 4 2
3 9 5
4 5 3
4 6 4
4 7 2
5 8 1
7 9 1
Sample Output
HINT
对于30%的数据,N ≤ 100;
对于60%的数据,N ≤ 1000;
对于100%的数据,N ≤ 1500,输入数据保证没有重边和自环。
Solution
数组开小了WA,开大了MLE……emmm
四个点每个点spfa各跑一边最短路,
然后选定以一个人为标准重新建图
怎么建呢?枚举每个边,判断其在不在最短路内就好了
做题的时候忘了很不应该,CF的时候还做过一个类似的判断边是否在最短路上的题
注意要建单向边
然后拓扑排序求最长链,那么这个链就是两人最短路的最长相交了。
Code
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<queue> 5 #define N (1500+10) 6 #define M (500000+10) 7 using namespace std; 8 struct node 9 { 10 int to,next,len; 11 } edge[M*2]; 12 int head[N],num_edge; 13 int n,m,x1,x2,y1,y2,len,p,ans; 14 int u[M],v[M],l[M],Ind[N],dis[N]; 15 int disx1[N],disx2[N],disy1[N],disy2[N],used[N]; 16 queue<int>q; 17 18 void add(int u,int v,int l) 19 { 20 edge[++num_edge].to=v; 21 edge[num_edge].next=head[u]; 22 edge[num_edge].len=l; 23 head[u]=num_edge; 24 } 25 26 void Spfa(int s,int *dis) 27 { 28 dis[s]=0; 29 used[s]=true; 30 q.push(s); 31 while (!q.empty()) 32 { 33 int x=q.front(); 34 q.pop(); 35 for (int i=head[x]; i; i=edge[i].next) 36 if (dis[x]+edge[i].len<dis[edge[i].to]) 37 { 38 dis[edge[i].to]=dis[x]+edge[i].len; 39 if (!used[edge[i].to]) 40 { 41 used[edge[i].to]=true; 42 q.push(edge[i].to); 43 } 44 } 45 used[x]=false; 46 } 47 } 48 49 void Toposort() 50 { 51 for (int i=1; i<=n; ++i) 52 if (!Ind[i]) q.push(i); 53 while (!q.empty()) 54 { 55 int x=q.front(); 56 q.pop(); 57 for (int i=head[x]; i; i=edge[i].next) 58 { 59 Ind[edge[i].to]--; 60 dis[edge[i].to]=max(dis[edge[i].to],dis[x]+edge[i].len); 61 ans=max(ans,dis[edge[i].to]); 62 if (!Ind[edge[i].to]) 63 q.push(edge[i].to); 64 } 65 } 66 } 67 68 int main() 69 { 70 scanf("%d%d",&n,&m); 71 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 72 for (int i=1; i<=m; ++i) 73 { 74 scanf("%d%d%d",&u[i],&v[i],&l[i]); 75 add(u[i],v[i],l[i]); 76 add(v[i],u[i],l[i]); 77 } 78 memset(disx1,0x7f,sizeof(disx1)); 79 memset(disy1,0x7f,sizeof(disy1)); 80 memset(disx2,0x7f,sizeof(disx2)); 81 memset(disy2,0x7f,sizeof(disy2)); 82 Spfa(x1,disx1); 83 Spfa(x2,disx2); 84 Spfa(y1,disy1); 85 Spfa(y2,disy2); 86 87 memset(edge,0,sizeof(edge)); 88 memset(head,0,sizeof(head)); 89 num_edge=0; 90 91 for (int i=1; i<=m; ++i) 92 { 93 int len1=min(disx1[u[i]],disx1[v[i]]) + l[i] + min(disy1[u[i]],disy1[v[i]]); 94 int len2=min(disx2[u[i]],disx2[v[i]]) + l[i] + min(disy2[u[i]],disy2[v[i]]); 95 if (len1!=disx1[y1] || len2!=disx2[y2]) continue; 96 if (disx1[u[i]]<disx1[v[i]]) add(u[i],v[i],l[i]),Ind[v[i]]++; 97 else add(v[i],u[i],l[i]),Ind[u[i]]++; 98 } 99 Toposort(); 100 printf("%d",ans); 101 }
转载于:https://www.cnblogs.com/refun/p/8685620.html
BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)相关推荐
- 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP
[BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...
- BZOJ1880: [Sdoi2009]Elaxia的路线|dijksrtra|暴力
貌似这题正解是spfa后 什么拓扑排序 其实完全不用酱紫-- 先用dijkstra求出s1 s2 e1 e2 到其他点的单元最短路 的四个数组ds1 ds2 de1 de2 然后枚举所有的 " ...
- [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA 拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- [SDOI2009]Elaxia的路线
https://www.luogu.org/problem/show?pid=2149 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两 ...
- 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序
->点我进原题 [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1116 Solved: 410 Des ...
- 有向无环图DAG 拓扑排序 代码解释
目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...
- POJ4084: 拓扑排序
拓扑排序 1)基本定义 对于一个有向无环图G=(V,E),V里顶点的线性序列称作一个拓扑序列,该顶点序列满足: 若在有向无环图G中从顶点viv_{i}vi到vjv_{j}vj有一条路径,则在序列中 ...
- 洛谷2149 Elaxia的路线(dp+最短路)
QwQ好久没更新博客了,颓废了好久啊,来补一点东西 题目大意 给定两个点对,求两对点间最短路的最长公共路径. 其中\(n,m\le 10^5\) 比较简单吧 就是跑四遍最短路,然后把最短路上的边拿出来 ...
最新文章
- pandas dataframe绘制并保存图像
- Android 系统(241)---IPv4 or IPv6 优先
- css3层级穿透,css页面滑动穿透的两种解决办法
- windows一键安装oracle,Oracle在Windows下快速搭建
- 登录Ubuntu提示有软件包可以更新
- 在Razor中如何引入命名空间?(import namespace in razor view)
- Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
- matlab新建文件夹
- 可视化 | 人物画像的设计方法
- Python基础_Day13
- 为什么 Go 语言能在中国这么火?
- Helm模版开发文档
- 【贪玩巴斯】一文通过操作实例——学会 知网专业检索 2022年3月21日
- 什么是AWS Athena
- 1分钟读懂猫咪免疫流程:怎么打疫苗,必须打的疫苗有哪些
- 数据库中间件选型思考和实战
- 计算机机房建设标准.doc,Kyztql计算机机房建设标准
- 搭建go语言开发环境
- 系统设计-网关(一)
- Abbkine细胞周期染色试剂盒特色和实验建议
热门文章
- HMC支持管理服务器数量及适合POWER6服务器的HMC型号
- 当你已经23~男生女生都该看
- FL Studio常见问题之通道窗口和步进音序器的设置
- Windows下开发Perl程序之环境搭建
- 三种方法构建简单的WEB服务器!
- RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现
- abp.net mysql_ABP .Net Core Entity Framework迁移使用MySql数据库
- python http get 请求_Python:编写HTTP Server处理GET请求
- java阿里系学习经历的小小领悟
- 2020重学Go系列:反引号的妙用—结构体里的 Tag 标签