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 ...
随机推荐
- Oracle对索引列同时使用多个聚合函数的性能问题
Oracle某一数据表tkk715(数据量在一千万左右),对一个索引字段做获取最大值与最小值的聚合函数操作,响应时间较长(超过3秒): 将SQL改写为分别取最大.最小的聚合值,IO和响应时间显著下降到 ...
- My second "last working day"
时间真快,转眼硕士毕业已经快8年了. 今天是我的第二个last working day.也是我即将结束在外企工作的节点. 说来,毕业的时候,找工作,在确定了最后要去的单位之前,手头已经拿过了10家单位 ...
- javascript 与和非
|| : 在javascript中,返回第一个真值,除非都是假值返回最后一个值(也是假值). 1 || 0; 0 || 1; 0 || 0; 0 || undefined; // undefined ...
- 【性能测试】性能测试总结<三>
常见性能测试工具: 性能测试工具,从理论上来讲在性能测试过程中使用到的所有工具都可以称其为性能测试工具,通常分为以下几类: 说明: 服务器端性能测试工具:需要支持产生压力和负载,录制和生成脚本,设置和 ...
- lucene之排序、设置权重、优化、分布式搜索(转)
lucene之排序.设置权重.优化.分布式搜索(转) 1. 基本应用 using System;using System.Collections.Generic;using System.Text;u ...
- 55. Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- Authentication token manipulation error for ubuntu ubuntu-16.04.1-desktop-amd64
https://ubuntuforums.org/showthread.php?t=1772894 Hi, I faced the same problem when I tried to recov ...
- SparkSql官方文档中文翻译(java版本)
1 概述(Overview) 2 DataFrames 2.1 入口:SQLContext(Starting Point: SQLContext) 2.2 创建DataFrames(Creating ...
- 最最简单的~WordCount¬
sc.textFile("hdfs://....").flatMap(line =>line.split(" ")).map(w =>(w,1)). ...
- PLSQL_长脚本如何判断需耗时多久v.sql / v.sqltext / v.sqlarea / v.sql_plan及nohup(案例)
2014-08-27 Created By BaoXinjian