[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 ...
随机推荐
- protobuf的安装和使用
以下全部基于win7系统. protobuf是什么,有什么用网上说的已经很多了.这里就是说一下怎么使用.就当给自己做个笔记吧. .proto文件的语法什么的也请网上查看,挺多的. 第一步: 下载pro ...
- 编程计算并输出1~n之间所有素数之和
http://www.tuicool.com/articles/qaaA3i TODO
- CSLight研究院之学习笔记结合NGUI(一)
原地址:http://www.xuanyusong.com/archives/3088 这两天一直在研究CSLight,目前Unity热更新的方式有两种,一种是ulua这个网上的例子已经很多了.还有一 ...
- vim使用指北 ---- Global Replacement
一般替换 s/old/new --- 替换当前行的第一个匹配项 s/old/new/g ---- 替换当前行所有的匹配项 number1,number2-s/old/new/g ---- 替换从 ...
- H5时代的新存储简介
1.WebStorage 分为:sessionStorage和localStorage两种,除了session的生命周期是在该域全部页面被关闭后就被清除而local是无限期存在外,二者的使用与方法属性 ...
- Jmeter测试Mysql
一.在测试计划下,找到Add directory or jar to classpath下填入jdbc驱动路径. 二.新建线程组. 三.在线程组下,添加配置元件—JDBC Connection Con ...
- POJ 1631
#include <iostream> #define MAXN 500005 using namespace std; int T[MAXN]; int binary_search(in ...
- Android中如何查看内存(上)
文章参照自:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-a ...
- Thread类详解
java.lang 类 Thread java.lang.Object java.lang.Thread 所有已实现的接口: Runnable public class Threadextends O ...
- ExtJs之Ext.each
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...