学习最短路建图 HUD 5521
http://acm.hdu.edu.cn/showproblem.php?pid=5521
题目大意:有n个点,m个集合,每个集合里面的点都两两可达且每条边权值都是val,有两个人A, B,A在pos=1,B在pos=n,问两者相遇的最短时间,输出相遇地点,如果有多个最短时间,输出的相遇地点按从小到大排序。
思路:因为集合暴力枚举点肯定mle。所以我不会TAT(我好菜啊)。于是看了一下别人的想法, 就是新建一个节点,然后让集合里面的所有节点都连向他, 然后权值定为和原来的权值一样,也是val(但是最后的ans要除以2)。 TAT,既然我都已经刷过网络流了,既然这个都没有想到
接下来就简单了。。。dijstra跑两次就好了= =
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const LL inf = 1e17;
const int maxn = 2e6 + ;
struct Edge{
int from, to; LL val;
Edge(int f = , int t = , LL val = ): from(f), to(t), val(val){}
};
struct Point{
int from; LL val;
Point(int f = , LL val = ): from(f), val(val){}
bool operator < (const Point &a) const{
return val > a.val;
}
};
vector<Edge> G[maxn];
int kase, n, m;
int a[maxn]; void build(int newpoint, int cnt, LL t){
for (int i = ; i <= cnt; i++){
G[a[i]].push_back(Edge(a[i], newpoint, t));
G[newpoint].push_back(Edge(newpoint, a[i], t));
}
}
LL d[maxn], d1[maxn], d2[maxn];
void dijstra(int s){
for (int i = ; i <= n + m; i++){
d[i] = inf;
}
d[s] = ;
priority_queue<Point> que;
que.push(Point(s, d[s]));
while (!que.empty()){
Point u = que.top(); que.pop();
int len = G[u.from].size();
for (int i = ; i < len; i++){
Edge p = G[u.from][i];
int v = p.to;
if (d[v] > d[u.from] + p.val){
d[v] = d[u.from] + p.val;
que.push(Point(v, d[v]));
}
}
}
} void solve(){
dijstra();
for (int i = ; i <= n; i++) d1[i] = d[i];
dijstra(n);
for (int i = ; i <= n; i++) d2[i] = d[i];
LL minival = inf;
for (int i = ; i <= n; i++){
minival = min(minival, max(d1[i], d2[i]));
}
if (minival == inf) {
printf("Case #%d: Evil John\n", ++kase);
return ;
}
vector<int> v;
for (int i = ; i <= n; i++){
if (minival == max(d1[i], d2[i])) v.push_back(i);
}
printf("Case #%d: %I64d\n", ++kase, minival / );
for (int i = ; i < v.size(); i++){
printf("%d%c", v[i], i == v.size() - ? '\n' : ' ');
}
} int main(){
int T; cin >> T;
while (T--){
scanf("%d%d", &n, &m);
for (int i = ; i <= n + m; i++) G[i].clear();
for (int i = ; i <= m; i++){
LL t; int cnt; scanf("%I64d%d", &t, &cnt);
for (int j = ; j <= cnt; j++){
scanf("%d", a + j);
}
build(i + n, cnt, t);
}
solve();
}
return ;
}
学习最短路建图 HUD 5521的更多相关文章
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 5294 Tricks Device 最短路建图+最小割
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...
- 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 ...
- 第八届河南省赛C.最少换乘(最短路建图)
C.最少换乘 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 94 Solved: 25 [Submit][Status][Web Board] De ...
- 『The Captain 最短路建图优化』
The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小 ...
- HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)
本题思路:主要是建图比较麻烦,因为结点可以在层与层之间走动,也可以在边上进行走动,所以主要就是需要找到一个将结点和层统一化处理的方法. 所以我们就可以对于存在边的结点建边,层与层之间如果层数相差一也建 ...
随机推荐
- 超链接解决头部fixed问题
///////////超链接解决头部fixed问题 $('a[href*=#]').click(function () { var top1 = $(".header").heig ...
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
什么是链?前后相连,一个连接下一个,其中包括多个节点,其实责任链模式也类似,他是多个对象之间相互关联,下一个对象的操作由上一个对象关联下来,上一个对象有个方法用于指向其他对象.职责链之间的前后关系是可 ...
- 每天200亿次查询 – MongoDB在奇虎360【转】
100多个应用,1,500多个实例,每天200亿次查询 奇虎是中国最大的安卓移动发布平台.奇虎也是中国最顶尖的病毒软件防护公司,同时为网络以及移动平台提供产品.自从2011年成为MongoDB的用户之 ...
- 一键批量ping任意ip段的存活主机
=======================by me===================================== @echo offecho.color FC for /f %%i ...
- 更改自身web项目的图标(默认为tomcat的小喵咪)
在页面<head>标签中加入 <link rel="shortcut icon" href="img/11.png" type="i ...
- shell脚本学习(五)
1.统计文件的行数.单词数.字符数 1)行数: wc -l file cat file | wc -l 2)单词数 wc -w file cat file | wc -w 3)统计字符数 wc -c ...
- chapter 14_1 环境
Lua将其所有的全局变量保存在一个常规的table中,称为“global environment”. Lua将环境table自身保存在一个全局变量_G中,_G._G等于 _G . 比如下面的代码打印出 ...
- log4j.properties文件的配置
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...
- Git一些其它的功能
Git 开始之前我们配置过user.name和user.email.其实还有很多其他的配置项 例如:让Git显示颜色,会让命令输出来更醒目: $ git config --global color.u ...
- startssl证书firefox支持配置
解决Firefox不信任StartSSL证书问题 wget http://cert.startssl.com/certs/ca.pem wget http://cert.startssl.com/ce ...