【HDOJ5521】Meeting(最短路)
题意:有n个点,m个点集,每个点集中有e[i]个点,同一点集的点互相之间到达需要t[i]单位的时间,求min(max(dis(1,i),dis(i,n))),i属于[1,n]
输出最小值并増序输出所有使答案取到最小值的i,无解输出Evil John
n<=1e5,1<=t[i]<=1e9,sigma e[i]<=1e6
思路:出烂了的裂点最短路
对于每个点集另外裂一个点id,设该点集中的点为a[i]
a[i]——>id 长度为t[i]
id——>a[i] 长度为0
以1和n为起点跑两遍dijkstra+堆
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 1200000
#define M 2200000
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1)
#define oo 1ll<<60
priority_queue<pair<ll,int> > q; ll dis1[N],dis2[N];
int head[N],vet[M],len[M],nxt[M],vis[N],c[N],id,tot; int add(int a,int b,int c)
{
//printf("%d %d %d\n",a,b,c);
nxt[++tot]=head[a];
vet[tot]=b;
len[tot]=c;
head[a]=tot;
} ll min(ll x,ll y)
{
if(x<y) return x;
return y;
} ll max(ll x,ll y)
{
if(x>y) return x;
return y;
} int main()
{
freopen("M.in","r",stdin);
freopen("M.out","w",stdout);
int cas;
scanf("%d",&cas);
for(int t=;t<=cas;t++)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=id;i++) head[i]=dis1[i]=dis2[i]=;
tot=;
id=n;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
id++;
for(int j=;j<=y;j++)
{
int z;
scanf("%d",&z);
add(z,id,x);
add(id,z,);
}
}
for(int i=;i<=id;i++)
{
vis[i]=;
dis1[i]=oo;
}
//for(int i=1;i<=id;i++) printf("%d %lld\n",i,dis1[i]);
q.push(MP(,)); dis1[]=;
while(!q.empty())
{
int u=q.top().se;
q.pop();
if(vis[u]) continue;
vis[u]=;
int e=head[u];
while(e)
{
int v=vet[e];
if(dis1[u]+len[e]<dis1[v])
{
dis1[v]=dis1[u]+len[e];
q.push(MP(-dis1[v],v));
}
e=nxt[e];
}
} for(int i=;i<=id;i++)
{
vis[i]=;
dis2[i]=oo;
}
q.push(MP(,n)); dis2[n]=;
while(!q.empty())
{
int u=q.top().se;
q.pop();
if(vis[u]) continue;
vis[u]=;
int e=head[u];
while(e)
{
int v=vet[e];
if(dis2[u]+len[e]<dis2[v])
{
dis2[v]=dis2[u]+len[e];
q.push(MP(-dis2[v],v));
}
e=nxt[e];
}
}
//for(int i=1;i<=id;i++) printf("%d %lld %lld\n",i,dis1[i],dis2[i]);
ll mn=oo;
for(int i=;i<=n;i++) mn=min(mn,max(dis1[i],dis2[i]));
// printf("mn=%lld\n",mn);
printf("Case #%d: ",t);
if(mn==oo) printf("Evil John\n");
else
{
int ans=;
for(int i=;i<=n;i++)
if(max(dis1[i],dis2[i])==mn) c[++ans]=i;
printf("%lld\n",mn);
for(int i=;i<=ans-;i++) printf("%d ",c[i]);
printf("%d\n",c[ans]);
}
}
return ;
}
【HDOJ5521】Meeting(最短路)的更多相关文章
- [HDOJ5521]Meeting(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 给n个点,m个块.块内点到点之间话费的时间ti.两个人分别从点1和点n出发,问两人是否可以相遇, ...
- hdu-5521 Meeting(最短路)
题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015沈阳区域赛Meeting(最短路 + 建图)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015沈阳站-Meeting 最短路
http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意:A,B两个人分别在1和n区.给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个 ...
- [hdu5521 Meeting]最短路
题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路 ...
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- URAL 1085 Meeting(最短路)
Meeting Time limit: 2.0 secondMemory limit: 64 MB K friends has decided to meet in order to celebrat ...
- HDU 5521:Meeting(最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description Bessie and her friend E ...
随机推荐
- form中 单选框 input[type="radio"] 分组
在form中有时候需要给单选框分组,这种情况下 可以通过给单选框设置相同的name来进行分组: <html> <head> <title> </title&g ...
- Python编写一个程序求2的次方
#!/usr/bin/env python3 #-*- coding:utf-8 -*- #":"冒号后面为对参数注释,"->"为对整个函数注释 def ...
- Java List 的深拷贝
老是会遇到深拷贝与浅拷贝的问题,这里进行了一些測试.代码例如以下: </pre><pre name="code" class="java"&g ...
- Disharmony Trees HDU - 3015
Disharmony Trees HDU - 3015 One day Sophia finds a very big square. There are n trees in the square. ...
- 遗传算法 | Java版GA_TSP (2)
嗯哼,上一篇博客中用Java实现了遗传算法求解TSP(Java版GA_TSP(我的第一个Java程序)),但明显求解效果不太好,都没太好意思贴出具体的结果,今天捣腾了下,对算法做了一些小改进,求解效果 ...
- 其它- in-place
in-place 刷编程题的时候,经常遇到题目要求do in-place.所以就上网搜了相关概念,简单总结一下. in-place操作,意思是所有的操作都是”就地“操作,不允许进行移动,或者称作 ...
- python中迷茫的编码问题
1.理清一些知识点: python默认的编码格式: ASCII(py2) unicode(py3) 查看默认编码:sys.defaultencoding 修改默认编码:#coding = utf-8 ...
- DiyCode开源项目 AboutActivity分析
1.首先看一下效果 这是手机上显示的效果: 1.1首先是一个标题栏,左侧一个左箭头,然后一个图标. 1.2然后下方是一个可以滑动的页面. 1.3分成了7个部分. 1.4DiyCode的图标. 1.5然 ...
- 测试环境docker化—容器集群编排实践
本文来自网易云社区 作者:孙婷婷 背景 在前文<测试环境docker化-基于ndp部署模式的docker基础镜像制作>中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭 ...
- IOS笔记046-UIApplication/导航控制器
UIApplication 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication sharedApplication]可以获得这个单例对象 一个iOS程序 ...