[hdu5521 Meeting]最短路
题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6。有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小
思路:这题是裸的最短路问题,难点在建图。然而建图也只有1步,在集合外新建1个点,每个点向它连一条Ti/2的边(避免浮点数,可以先乘2,然后结果除以2)。如此巧妙。。。
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pb(x) push_back(x)
#define mp(x, y) make_pair(x, y)
#define all(a) (a).begin(), (a).end()
#define mset(a, x) memset(a, x, sizeof(a))
#define mcpy(a, b) memcpy(a, b, sizeof(b))
#define cas() int T, cas = 0; cin >> T; while (T --)
template<typename T>bool umax(T&a, const T&b){return a<b?(a=b,true):false;}
template<typename T>bool umin(T&a, const T&b){return b<a?(a=b,true):false;}
typedef long long ll;
typedef pair<int, int> pii; #ifndef ONLINE_JUDGE
#include "local.h"
#endif const int N = 1e6 + 7; struct Edge {
int u, v, w;
int next;
Edge(int u, int v, int w) {
this->u = u;
this->v = v;
this->w = w;
}
Edge() {}
};
int SZ;
int head[N];
Edge edge[N << 1];
ll d1[N], dn[N];
int n, m, nn;
bool used[N]; void add(int u, int v, int w) {
edge[SZ] = Edge(u, v, w);
edge[SZ].next = head[u];
head[u] = SZ ++;
} void spfa(int s, ll d[]) {
queue<int> Q;
for (int i = 1; i <= nn; i ++) d[i] = pow(10, 18) + 7;
d[s] = 0;
mset(used, 0);
Q.push(s);
while (!Q.empty()) {
int u = Q.front(); Q.pop();
used[u] = false;
for (int i = head[u]; ~i; i = edge[i].next) {
Edge e = edge[i];
if (umin(d[e.v], d[u] + e.w)) {
if (!used[e.v]) {
Q.push(e.v);
used[e.v] = true;
}
}
}
}
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // ONLINE_JUDGE
int t, s, u;
cas() {
printf("Case #%d: ", ++ cas);
cin >> n >> m;
nn = n;
mset(head, -1);
SZ = 0;
for (int i = 0; i < m; i ++) {
scanf("%d%d", &t, &s);
nn ++;
for (int j = 0; j < s; j ++) {
scanf("%d", &u);
add(u, nn, t);
add(nn, u, t);
}
}
spfa(1, d1);
spfa(n, dn);
ll mind = pow(10, 18);
bool yes = false;
vector<int> ans;
for (int i = 1; i <= n; i ++) {
if (umin(mind, max(d1[i], dn[i]))) yes = true;
}
if (!yes) {
puts("Evil John");
continue;
}
cout << mind / 2 << endl;
for (int i = 1; i <= n; i ++) {
if (max(d1[i], dn[i]) == mind) {
ans.pb(i);
}
}
sort(all(ans));
for (int i = 0; i < ans.size(); i ++) {
printf("%d%c", ans[i], i == ans.size() - 1? '\n' : ' ');
}
}
return 0;
}
[hdu5521 Meeting]最短路的更多相关文章
- hdu-5521 Meeting(最短路)
题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- HDU5521 Meeting(dijkstra+巧妙建图)
HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的 ...
- hdu5521(Meeting)spfa 层次网络最短路
题意:给出几个集合,每个集合中有Si个点 且任意两个点的距离为ti,现在要求两个人分别从1和n出发,问最短多长时间才能遇到,且给出这些可能的相遇点; 取两个人到达某点时所用时间大的值 然后取最小的 ...
- HDU5521 Meeting 题解 最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意: 有 \(n\) 个点 \(m\) 个集合,一个点可能处于若干个集合内,属于第 \(i ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu5521 Meeting
传送门 题目 Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated hi ...
- 2015沈阳区域赛Meeting(最短路 + 建图)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- ACM学习历程—HDU5521 Meeting(图论)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...
- 2015沈阳站-Meeting 最短路
http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意:A,B两个人分别在1和n区.给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个 ...
随机推荐
- Project configuration is not up-to-date with pom.xml.错误
完整错误信息:Description Resource Path Location TypeProject configuration is not up-to-date with pom.xml. ...
- SpringBoot系列(九)单,多文件上传的正确姿势
SpringBoot系列(九)分分钟解决文件上传 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配 ...
- 原生Js贪吃蛇游戏实战开发笔记
前言 本课程是通过JavaScript结合WebAPI DOM实现的一版网页游戏---贪吃蛇的开发全过程,采用面向以象的思想设计开发.通过这个小游戏的开发, 不仅可以掌握JS的语法的应用,还可以学会D ...
- ThinkPHP框架初步掌握
为了帮老师用ThinkSNS二次开发一个微博系统,专门花了几天学习ThinkPHP框架,现在将一些ThinkPHP入门知识作以记录. 首先声明: 本文不是完全教程,只是将开发中碰到的问题作以总结,如果 ...
- filter和interceptor的区别
前言 最近在面试的时候,被问到了这个问题,觉得答得不是很好,在此进行整理和记录,供自己学习,也希望能帮助到大家. 什么是Filter 在java的javax.servlet下有一个接口Filter.任 ...
- [Windows] 如何用编程的方式格式化硬盘
If memory serves, you're looking for SHFormatDrive(). Use the Format method of the Win32_Volume clas ...
- Zabbix CPU utilization监控参数
工作中查看Zabbix linux 监控项的时候对linux 监控的cpu使用的各个参数没怎么明白,特意查看了下资料 Zabbix linux模板下的CPU utilization是自带的监控Linu ...
- Eureka重点原理解析
前言 带着问题学习,事半功倍.本文将对如下几个问题进行总结说明: 1.EurekaServer端服务注册的流程和设计模式 2.Eureka服务续约的bug 3.EurekaClient的启动流程 4. ...
- from _sqlite3 import * ImportError: DLL load failed: 找不到指定的模块。
*Error creating Django application: Error on python side. Exit code: 1, err: Traceback (most recent ...
- 云时代 • 新契机:2017届中国SaaS产业大会圆满落幕
2017年5-6日,由拓普会展携手中国云体系产业创新战略联盟主办,江苏省企业信息化协会,浙江省企业信息化促进会,广东省首席信息官协会,CIO时代学院,IDC点评网协办以及上海市网购商会,中国信息化推进 ...