HDU 5521 [图论][最短路][建图灵感]
/*
思前想后 还是决定坚持写博客吧... 题意:
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 [图论][最短路][建图灵感]的更多相关文章
- hdu 5294 Tricks Device 最短路建图+最小割
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...
- HDU 5669 线段树优化建图+分层图最短路
用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...
- 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 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)
Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
- Food HDU - 4292 网络流 拆点建图
http://acm.hdu.edu.cn/showproblem.php?pid=4292 给一些人想要的食物和饮料,和你拥有的数量,问最多多少人可以同时获得一份食物和一份饮料 写的时候一共用了2种 ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 第八届河南省赛C.最少换乘(最短路建图)
C.最少换乘 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 94 Solved: 25 [Submit][Status][Web Board] De ...
随机推荐
- Linux-LNMP LAMP LNMPA
这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa(Linux.Nginx/Tengine.MySQL/MariaDB/Percona.PHP),适用于CentOS ...
- 淘宝天猫关键词SEO优化
淘宝天猫的网站完全像是一个成熟的搜索引擎,只是从google.bing.baidu改成了淘宝天猫而已,普通搜索引擎有品专,有皇冠,有PC,有无线:淘宝天猫里面有钻展,有直通车,也有PC,无线.搜索引擎 ...
- Oracle的rownum原理和使用
整理和学习了一下网上高手关于rownum的帖子: 参考资料: http://tech.ddvip.com/2008-10/122490439383296.html 和 http://tenn.jav ...
- 【性能诊断】二、单功能场景的性能分析(fiddler、SQL Profiler)
Fiddler fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测 ...
- android操作sdcard中的多媒体文件(二)——音乐列表的更新
android操作sdcard中的多媒体文件(二)——音乐列表的更新 原文地址 在上一篇随笔中,我介绍了如何在程序中查询sdcard内的多媒体文件,并且显示到播放列表中,但是,如果在sdcard内删除 ...
- [oracle] ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
ORACLE 32位数据库正常安装,sqlplus 正常连接数据库但是PL/SQL developer 64位却报出这个错误. 第一反应是缺少32位客户端.下载安装,配置完成后如图所示: 还是报这个错 ...
- JAVA解析各种编码密钥对(DER、PEM、openssh公钥)
一.DER编码密钥对 先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的,可以参见PKCS8EncodedKeySpec和X509EncodedKeySpec. DER编码是ASN.1编 ...
- JS和C# 互相调用与数据绑定问题
<asp:GridView ID="GridView1" runat="server" onselectedindexchanged="Grid ...
- css之四大类选择器
一.选择器: 关于组合选择器之间的区别: 后代选择器(A B)与子选择器(A>B)之间的区别: 后代选择器: 子选择器: 总结:后代选择器的作用范围是一个元素里面包含的所有元素,即包括的是所有的 ...
- Redis主从同步介绍
Redis主从同步命令和配置项 启动主从复制:master无需任何操作,slave中使用以下任意一种开启复制功能 (1).通过配置文件启动主从复制: 在redis.conf中加入"slave ...