hdu5521(Meeting)spfa 层次网络最短路
题意:给出几个集合,每个集合中有Si个点 且任意两个点的距离为ti,现在要求两个人分别从1和n出发,问最短多长时间才能遇到,且给出这些可能的相遇点;
取两个人到达某点时所用时间大的值 然后取最小的 若有多个结果 则按点的升序排列
解析:
比较裸的最短路 ,但坑在建图上,Si的和小于1e6 那么建的边肯定会超内存 所以压缩一下,把每个集合看作一个点 集合中的点到集合的距离为0 集合到集合中的点的距离为ti 即入为0 出为ti 然后普通最短路求就好了
spfa:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #include <cmath>
- #include <algorithm>
- #define mem(a,b) memset(a,b,sizeof(a))
- using namespace std;
- const int maxn = , INF = 0xfffffff;
- typedef long long LL;
- int n,m;
- int d[maxn], head[maxn], vis[maxn],tran1[maxn], tran2[maxn];
- struct time{
- int sum,ix;
- }Time[maxn];
- int cmp(time a,time b)
- {
- if(a.sum == b.sum) return a.ix < b.ix;
- return a.sum < b.sum;
- }
- struct node{
- int u,v,w,next;
- }Node[maxn];
- void add(int u,int v,int w,int i)
- {
- Node[i].u = u;
- Node[i].v = v;
- Node[i].w = w;
- Node[i].next = head[u];
- head[u] = i;
- }
- void spfa(int s)
- {
- queue<int> Q;
- fill(d,d+maxn,INF);
- mem(vis,);
- d[s] = ;
- Q.push(s);
- vis[s] = ;
- while(!Q.empty())
- {
- int u = Q.front();Q.pop();
- vis[u] = ;
- for(int i=head[u]; i!=-; i=Node[i].next)
- {
- node e = Node[i];
- if(d[e.v] > d[u] + e.w)
- {
- d[e.v] = d[u] + e.w;
- if(!vis[e.v])
- {
- Q.push(e.v);
- vis[e.v] = ;
- }
- }
- }
- }
- }
- int main()
- {
- int T;
- int temp = ;
- scanf("%d",&T);
- while(T--)
- {
- mem(head,-);
- mem(tran1,);
- mem(tran2,);
- mem(Time,);
- int ans = ;
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;i++)
- {
- int t,h,tmp;
- scanf("%d%d",&t,&h);
- while(h--)
- {
- scanf("%d",&tmp);
- add(tmp,n+i,,ans++);
- add(n+i,tmp,t,ans++);
- }
- }
- spfa();
- for(int i=;i<=n;i++)
- tran1[i] = d[i];
- spfa(n);
- for(int i=;i<=n;i++)
- tran2[i] = d[i];
- for(int i=;i<n;i++)
- {
- Time[i].sum = max(tran1[i+],tran2[i+]);
- Time[i].ix = i+;
- }
- sort(Time,Time+n,cmp);
- LL res = Time[].sum;
- printf("Case #%d: ",++temp);
- if(res == INF)
- {
- printf("Evil John\n");
- continue;
- }
- printf("%I64d\n",res);
- for(int i=;i<n;i++)
- {
- if(res == Time[i].sum)
- {
- if(i > ) printf(" ");
- printf("%d",Time[i].ix);
- }
- else
- break;
- }
- printf("\n");
- }
- return ;
- }
hdu5521(Meeting)spfa 层次网络最短路的更多相关文章
- HDU5521 Meeting(dijkstra+巧妙建图)
HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的 ...
- Spfa(最短路求解)
spfa(最短路求解) 模板: #include<iostream> #include<cstdio> #include<queue> #include<cs ...
- 基于bellman-ford算法使用队列优化的spfa求最短路O(m),最坏O(n*m)
acwing851-spfa求最短路 #include<iostream> #include<cstring> #include<algorithm> #inclu ...
- ACM - 最短路 - AcWing 851 spfa求最短路
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...
- hdu-5521 Meeting(最短路)
题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- HDU5521 Meeting 题解 最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意: 有 \(n\) 个点 \(m\) 个集合,一个点可能处于若干个集合内,属于第 \(i ...
- [hdu5521 Meeting]最短路
题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路 ...
- 【SPFA】 最短路计数
最短路计数 [问题描述] 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式] 输入第一行包含2个正整数N,M,为图的顶点数与边数. ...
- NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...
随机推荐
- linux笔记-多服务器同时执行相同命令
1.服务器的ip地址写到文件中,命名为nodelist.txt 192.168.1.160 192.168.1.166 2.编写运行脚本 for i in `cat nodelist.txt`do s ...
- jdk1.8安装后查看Java -version出错。
最近在电脑行安装了多个jdk的版本 分别是jdk1.6,jdk1.7,jdk1.8三个版本,在配置环境变量的时候,选择的是jdk1.7; 但是奇怪的是,当我在cmd中输入java -version后, ...
- 02-Centos7安装部署Mirrorgate
1.以Docker方式运行 MirrorGate服务器作为docker镜像提供,因此要运行它只需在终端中执行以下命令: 注意mongo镜像要使用3.6版本,其他版本会提示版本问题. #Spinup m ...
- LOJ2687 BOI2013 Vim 线头DP
传送门 多图警告!!! 一种很新奇的\(DP\),全网似乎只有一两篇题解-- 首先,序列中的一段\(e\)等价于在跳的过程中这一段\(e\)之后的一个字符必须要经过,并且在最后的答案中加上$2 \ti ...
- Luogu3524 POI2011 Party 图论、构造
题目传送门:https://www.luogu.org/problemnew/show/P3524 大意:给一个$N$个点的图,其中一定有一个大小为$\frac{2}{3}N$的团,程序需给出一个大小 ...
- 把一个List<T>的数据复制至另一个List<T>
把一个数据集List<T>复制至到另一个数据集List<T>. 方法一,可以使用循环,然后把每一个T添加至另一个集合中去: public void ListDemo() { , ...
- vue 动态创建组件(运行时创建组件)
function mountCmp (cmp, props, parent) { if (cmp.default) { cmp = cmp.default } cmp = Vue.extend(cmp ...
- kafka学习2:kafka集群安装与配置
在前一篇:kafka学习1:kafka安装 中,我们安装了单机版的Kafka,而在实际应用中,不可能是单机版的应用,必定是以集群的方式出现.本篇介绍Kafka集群的安装过程: 一.准备工作 1.开通Z ...
- Verilog设计Valid-Ready握手协议
转自http://ninghechuan.com 我不生产知识,我只是知识的搬运工. Handshake Protocol握手协议!为了保证数据传输过程中准确无误,我们需要加上握手信号来控制信号的传输 ...
- Mvc4_ @RenderBody、@RenderPage、@RenderSection用法
一.@RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过_Layout.cshtml布局页面的@RenderBody() ...