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 ...
随机推荐
- Ext is not defined
最近由于项目设计到Extjs所以也准备研究一下,可是谁知道刚写好一个demo,运行的时候死活出不来界面,于是用firebug看了一下,出现:Ext is not defined,因为刚开始学也不知道是 ...
- DBA常用SQL之DDL生成语句
获取对象定义的包为:dbms_metadata,其中的get_ddl函数是获取对象的函数 GET_DDL函数返回创建对象的原数据的DDL语句,参数说明 .object_type ---需要返回原数据的 ...
- 本地同时启动两个tomcat
本地同时启动两个tomcat 这几天开发用到了Ext JS4,所以着手学习Ext JS4,由于官方很多demo都是需要与服务器端进行数据交互,因此需要在tomcat里部署上官方的demo.而本地mye ...
- Struts2 - Check Login Interceptor
Struts2使用Interceptor做用户登陆检查: 1)新增一个bean: User.java package com.my.beans; import java.util.Date; impo ...
- C\C++拾遗------C#程序员重温C\C++之要点
1.开发工具:建议采用VS2012及2013 1).因为VS2012对C++编码实现了自动编排格式(Ctrl E D) 2).提供智能感知(联想输入)功能 相比VS2010及以前版本对于习惯了智能感知 ...
- 替换、恢复Html中的特殊字符
public static string HtmlEncode(string theString){theString = theString.Replace(">", &q ...
- 51nod 1314 定位系统
一个国家有N个城市(标号为0~N-1),这N个城市恰好由N-1条道路连接在一起(即N个城市正好构成一个树状结构).这个国家的所有道路的长度都是1个长度单位.定义:两个城市间的距离是两个城市间的最短路的 ...
- mysql的主从配置以及主主配置
基础环境 系统:linuxmysql版本:5.5主服务器IP:192.168.1.101从服务器IP:192.168.1.102 1.主服务器(master)要打开二进制日志2.从服务器(slave) ...
- git设置代理
git config --global https.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0. ...
- C基础--函数指针的使用
之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: lin ...