[HDOJ5521]Meeting(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521
给n个点,m个块。块内点到点之间话费的时间ti。两个人分别从点1和点n出发,问两人是否可以相遇,并求出相遇最短时间和路径,路径按照字典序输出。
这题的难点在于处理块内的点到块外点的关系。我们可以添加一个“集合点”,此点到集合内各点距离为w,点到此集合的距离为0建图。
从1和n分别做一次最短路,找到每一个距离最长的点(即为相遇点),记下长度再枚举两个结果,看一共多少个相遇点
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; typedef long long ll;
typedef pair<int, int> pii;
typedef struct E {
int w;
int v;
E() {}
E(int vv, int ww) : v(vv), w(ww) {}
}E; const int inf = 0x7f7f7f7f;
const int maxn = ; priority_queue<pii, vector<pii>, greater<pii> > pq;
vector<E> e[maxn];
vector<int> path;
ll d[][maxn];
int n, m, u, v, w, k; template<int cho>
void dijkstra(int s) {
memset(d[cho], inf, sizeof(d[cho]));
while(!pq.empty()) pq.pop();
d[cho][s] = ;
pq.push(pii(, s));
while(!pq.empty()) {
pii cur = pq.top(); pq.pop();
w = cur.first;
v = cur.second;
if(d[cho][v] < w) continue;
for(int i = ; i < e[v].size(); i++) {
if(d[cho][e[v][i].v] > d[cho][v] + e[v][i].w) {
d[cho][e[v][i].v] = d[cho][v] + e[v][i].w;
pq.push(pii(d[cho][e[v][i].v], e[v][i].v));
}
}
}
} inline bool scan_d(int &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<''||in>'')) in=getchar();
if(in=='-'){ IsN=true;num=;}
else num=in-'';
while(in=getchar(),in>=''&&in<=''){
num*=,num+=in-'';
}
if(IsN) num=-num;
return true;
} int main() {
// freopen("in", "r", stdin);
int T, _ = ;
scan_d(T);
while(T--) {
for(int i = ; i < maxn; i++) e[i].clear();
path.clear();
scan_d(n); scan_d(m);
for(int i = ; i <= m; i++) {
scan_d(w); scan_d(k);
while(k--) {
scanf("%d", &v);
e[n+i].push_back(E(v, w));
e[v].push_back(E(n+i, ));
}
}
dijkstra<>(); dijkstra<>(n);
ll cur = inf;
for(int i = ; i <= n; i++) {
cur = min(cur, max(d[][i], d[][i]));
}
for(int i = ; i <= n; i++) {
if(cur == max(d[][i], d[][i])) {
path.push_back(i);
}
}
printf("Case #%d: ", _++);
if(cur == inf) {
printf("Evil John\n");
continue;
}
printf("%I64d\n", cur);
for(int i = ; i < path.size(); i++) {
printf("%d", path[i]);
if(i == path.size() - ) printf("\n");
else printf(" ");
}
}
return ;
}
[HDOJ5521]Meeting(最短路)的更多相关文章
- hdu-5521 Meeting(最短路)
题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015沈阳区域赛Meeting(最短路 + 建图)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015沈阳站-Meeting 最短路
http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意:A,B两个人分别在1和n区.给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个 ...
- [hdu5521 Meeting]最短路
题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路 ...
- 【HDOJ5521】Meeting(最短路)
题意:有n个点,m个点集,每个点集中有e[i]个点,同一点集的点互相之间到达需要t[i]单位的时间,求min(max(dis(1,i),dis(i,n))),i属于[1,n] 输出最小值并増序输出所有 ...
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- URAL 1085 Meeting(最短路)
Meeting Time limit: 2.0 secondMemory limit: 64 MB K friends has decided to meet in order to celebrat ...
- HDU 5521:Meeting(最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description Bessie and her friend E ...
随机推荐
- 【CTSC 2015】&【APIO 2015】酱油记
蒟蒻有幸参加了神犇云集的CTSC & APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0 从太原到北京现在坐高铁只需3小时= ...
- Winform跨线程操作界面的策略
BeginInvoke(new ThreadStart(() => toolStripButton1.Text = "aaa")); 1.非跨线程操作和部分跨线程get不会引 ...
- 我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身
年底了,各种总结计划满天飞,有空的时候我也一直在思考这么多年,是怎么过来的.也曾经很迷茫,希望经验和经历能给大家一点带来一点正能量的东西.10年很长,10年前说实话我没有思考过现在的样子,但10年前的 ...
- JS中函数的基础知识
函数 一. 函数定义 函数又叫方法,在程序里面函数是用来执行某些特定功能的代码.为了减少重复使用代码,可以把特定功能的代码做成函数,需要使用时拿出来调用.alert();就是一个很常见的.简单的函数 ...
- E3: PS4/PC 莎木3 众筹200万美元 9小时内达成
这次E3任天堂没有新掌机(传说中的XDS呢.呵呵)和口袋的消息, 被喷得很严重, 索尼的FF7重制版和莎木3是亮点. 而莎木3的众筹速度据说创了记录, 玩家的情怀大胜. 笔者看到国内也有赞助几十刀的玩 ...
- ios瀑布流
http://blog.csdn.net/shenjx1225/article/details/9037631
- 关于gzip压缩
关于gzip压缩 http://httpd.apache.org/docs/2.0/mod/mod_deflate.html http://www.phpchina.com/resource/manu ...
- 关于WSDL
Message Operation 最核心的在于Operation 只要关心Operation就可以了,Operation只有Input, Output没有其他内容,是相对固定的.只要关心一下Inpu ...
- IOS Crash捕获
IOS Crash ,就两种情况:一种是异常,另一种是中断[信号量]. #include <libkern/OSAtomic.h> #include <execinfo.h> ...
- C Primer Plus之位操作
二进制补码表示法 几乎所有的计算机都使用二进制补码表示法来存储位于n位存储单元中的有符号整数. 在二进制补码表示法中,最左位决定符号.如果它是0,该整数为正(即非负):如果是1,该整数为负 ...