题意:有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(最短路)的更多相关文章

  1. [HDOJ5521]Meeting(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 给n个点,m个块.块内点到点之间话费的时间ti.两个人分别从点1和点n出发,问两人是否可以相遇, ...

  2. hdu-5521 Meeting(最短路)

    题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  3. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. 2015沈阳区域赛Meeting(最短路 + 建图)

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. 2015沈阳站-Meeting 最短路

    http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意:A,B两个人分别在1和n区.给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个 ...

  6. [hdu5521 Meeting]最短路

    题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路 ...

  7. HDU 5521 Meeting(虚拟节点+最短路)

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  8. URAL 1085 Meeting(最短路)

    Meeting Time limit: 2.0 secondMemory limit: 64 MB K friends has decided to meet in order to celebrat ...

  9. HDU 5521:Meeting(最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description   Bessie and her friend E ...

随机推荐

  1. JavaScript方法中this关键字使用注意

    问题来源 本文是基于廖雪峰老师JavaScript课程中的方法一节以及阮一峰老师JavaScript 的 this 原理 所记. 首先,我们了解一下JavaScript中的方法:在一个对象中绑定函数, ...

  2. DevOps - 版本控制 - Gogs

    Gogs Gogs官网:https://gogs.io Gogs文档:https://gogs.io/docs Gogs配置文件手册:https://gogs.io/docs/advanced/con ...

  3. mybatis的优缺点及应用场合

    mybatis框架的优点 与jdbc相比,减少了50%以上的代码量 mybatis是最简单的持久化框架,小巧简单且易学 mybatis想到灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写 ...

  4. 将xml转为array 输出xml字符

    //将xml转为array private function fromXml($xml){ // 禁止引用外部xml实体 libxml_disable_entity_loader(true); ret ...

  5. BFS:HDU2597-Dating with girls(2) (分时间标记状态)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. 动态规划:HDU-2955-0-1背包问题:Robberies

    解题心得: 这题涉及概率问题,所以要运用概率的知识进行解答.题目要求不被抓到的概率,但是给出的是被抓到的概率,所要用1减去后得到答案.最好使用double类型,避免精度问题导致WA. 先算出可以抢劫的 ...

  7. HDOJ 2120 Ice_cream's world I

    Ice_cream's world I ice_cream's world is a rich country, it has many fertile lands. Today, the queen ...

  8. Intellij Idea 创建JavaWeb项目

    折腾Tomcat折腾了两个晚上,第一个晚上怎么都进不了Tomcat的首页,第二个晚上进去了,但是新建的Web项目,在浏览器中运行,总是 Error on Apache Tomcat: The requ ...

  9. UVa 1649 Binomial coefficients 数学

    题意: \(C(n, k) = m(2 \leq m \leq 10^{15})\),给出\(m\)求所有可能的\(n\)和\(k\). 分析: 设\(minK = min(k, n - k)\),容 ...

  10. 线性回归 python小样例

    线性回归优点:结果易于理解,计算上不复杂缺点:对非线性的数据拟合不好适用数据类型:数值型和标称型数据horse=0.0015*annualSalary-0.99*hoursListeningToPul ...