/*
思前想后 还是决定坚持写博客吧... 题意:
n个点,m个集合。每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i])
求同时从第1个点和第n个点出发的两个人相遇的最短时间,并输出相遇的地点,如果有多个按编号大小顺序输出。
输入:
测试数据 t
n m 以下m行每行
dis[i] 该集合点的数量 ...每个点的标号
数据范围:
n 2-1e5
所有集合的元素的数量和 1e6 思路:
如果直接跑最短路,边会存爆的。
考虑换种思路建边。
每个集合看作两个点,一个为入点一个为出点,从出点往入点连接一条dis[i]的边。
然后再从入点往集合里包含的点连一条权值为0的边,从该点网出点连一条权值为0的边。
这样建图 大概有2e6个点 3e6条边...
然后利用heap优化dij就可以解决从1到其它所有点的最短路,和从n到其它所有点的最短路。
然后扫描一下...
反思:
1.PE这种事最可耻了
2.我想到了每个集合多加两个点,但是后边就有点崩了。图论还需多看。
3.这题不难不难不难。多用心。多想想。
*/
#include<bits/stdc++.h>
#define N 2500000
#define M 3500000
using namespace std;
struct st
{
int id;
long long dis;
st(int a,long long b)
{
id=a;
dis=b;
}
st(){};
};
bool operator < (const st &a,const st &b){
return a.dis>b.dis;
}
struct edge{
int id;
long long w;
edge *next;
};
int ednum;
edge edges[M];
edge *adj[N];
long long dis1[N],dis2[N];
long long inf=0x3f3f3f3f3f3f3f3f;
inline void addedge(int a,int b,long long dis){
edge *tmp=&edges[ednum++];
tmp->id=b;
tmp->next=adj[a];
tmp->w=dis;
adj[a]=tmp;
}
void heap_dij(int tar,int MAXN,long long *dis)
{
for(int i=;i<=MAXN;i++){
dis[i]=inf;
}
priority_queue<st>q;
st tmp;
dis[tar]=;
q.push(st(tar,));
while(!q.empty())
{
tmp=q.top();
q.pop();
if(dis[tmp.id]<tmp.dis)continue;
for(edge *p=adj[tmp.id];p;p=p->next)
{
if(dis[p->id]>p->w+dis[tmp.id])
{
dis[p->id]=p->w+dis[tmp.id];
q.push(st(p->id,dis[p->id]));
}
}
}
}
int main()
{
int t,cas=;
scanf("%d",&t);
while(t--){
ednum=;
memset(adj,NULL,sizeof(adj));
cas++;
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
long long d;
int nn;
scanf("%lld%d",&d,&nn);
addedge(n+*(i-)+,n+*(i-)+,d);
for(int j=;j<=nn;j++){
int tmp;
scanf("%d",&tmp);
addedge(n+*(i-)+,tmp,);
addedge(tmp,n+*(i-)+,);
}
}
heap_dij(,*m+n,dis1);
heap_dij(n,*m+n,dis2);
long long ans=inf;
printf("Case #%d: ",cas);
for(int i=;i<=n;i++){
ans=min(ans,max(dis1[i],dis2[i]));
}
if(ans==inf)puts("Evil John");
else printf("%lld\n",ans);
bool ok=;
if(ans!=inf)
for(int i=;i<=n;i++){
if(max(dis1[i],dis2[i])==ans){
if(ok)printf(" %d",i);
else{
ok=;
printf("%d",i);
}
}
}
if(ans!=inf)puts("");
}
}

HDU 5521 [图论][最短路][建图灵感]的更多相关文章

  1. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  2. HDU 5669 线段树优化建图+分层图最短路

    用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...

  3. hdu 4725 The Shortest Path in Nya Graph (最短路+建图)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  4. hdu4725 The Shortest Path in Nya Graph【最短路+建图】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html      ---by 墨染之樱花 题目链接:http://acm.hdu ...

  5. hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)

    Walk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  6. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

  7. Food HDU - 4292 网络流 拆点建图

    http://acm.hdu.edu.cn/showproblem.php?pid=4292 给一些人想要的食物和饮料,和你拥有的数量,问最多多少人可以同时获得一份食物和一份饮料 写的时候一共用了2种 ...

  8. HDU5521-最短路-建图

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

  9. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...

随机推荐

  1. ie8下table的colspan属性与max-with属性的显示错乱问题

    今天项目测试时发现了一个table的colspan样式问题,发现colspan单元格下的的元素设置max-with后将上面的第二列单元格撑开了,导致后面单元格的内容换行,先看代码: html代码: & ...

  2. jmeter制造安全证书

    对安全性有要求的网站一般使用https来加密传输的请求和响应.https离不开证书,关于证书不在多说.Apache的HttpClient支持https, 下面是官方的样例程序,程序中使用了my.sto ...

  3. 如何计算oracle数据库内存

    数据库内存设置: 项目 数据关系 单位 系统CPU n 个 物理内存Memory 假设4G物理内存 4*1024 MB memory_target 0.5*4*1024 0.5*Memory sga_ ...

  4. 【性能测试】性能测试总结<二>

    本文主要介绍下性能测试的基本流程,性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,如下图: 下面分别介绍下每个阶段具体需要做什么: 一.性能需求分析: 首先,让我们来看看通过性能需求分析我 ...

  5. WIN8外包公司【经验分享】——升级WIN8.1后VS2012报错解决方法

    今天升级WIN8.1的时候发现VS2012不能正常工作,原来的Silverlight项目也无法正常打开了,这是WIN8.1升级产生的bug. 得知微软提供了VISUAL STUDIO 2012 UPD ...

  6. 关于程序路径Path.Combine以及AppDomain.CurrentDomain.BaseDirectory

    关于程序路径 LucenePath:@(System.Configuration.ConfigurationManager.AppSettings["LucenePath"])&l ...

  7. 【VNC】Ubuntu14.04LTS下安装VNC View

    # apt-get install tightvncserver vnc4server gnome-panel gnome-settings-daemon metacity nautilus gnom ...

  8. php计算字符串长度:utf8编码,包含中文

    php计算字符串长度:utf8编码 中文当作1个字符处理(strlen默认当作两个字符) 上函数: /** * 计算 UTF-8 字符串长度 * * @param string $str * @ret ...

  9. 反转(开关问题) POJ 3276

    POJ 3276 题意:n头牛站成线,有朝前有朝后的的,然后每次可以选择大小为k的区间里的牛全部转向,会有一个最小操作m次使得它们全部面朝前方.问:求最小操作m,再此基础上求k. 题解:1.5000头 ...

  10. Hadoop学习1--解决启动过程中的问题

    方法:http://www.aboutyun.com/thread-12694-1-1.html http://www.linuxidc.com/topicnews.aspx?tid=13 http: ...