HDU 5521 Meeting
2015 ACM / ICPC 沈阳站现场赛 M题
最短路
设置N+M个节点,前N个节点是Block,后M个节点是Set,每一组Set中的点向该Set连边,从1和n开始分别求最短路。注意爆int。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std; const long long INF=1e16;
const int maxn=+;
const int maxm=+;
long long dis1[maxn],dis2[maxn],val[maxn];
bool flag1[maxn],flag2[maxn];
vector<int>G[maxn];
vector<int>Ans;
struct Edge
{
int from;
int to;
}e[maxm];
int T,n,m,tot; void init()
{
memset(val,,sizeof val);
memset(flag1,,sizeof flag1);
for(int i=;i<maxn;i++) dis1[i]=INF;
memset(flag2,,sizeof flag2);
for(int i=;i<maxn;i++) dis2[i]=INF;
for(int i=;i<maxn;i++) G[i].clear();
Ans.clear();
tot=;
} void AddEdge(int x,int y)
{
tot++;
e[tot].from=x;
e[tot].to=y;
G[x].push_back(tot); tot++;
e[tot].from=y;
e[tot].to=x;
G[y].push_back(tot);
} void spfa1()
{
queue<int>Q;
Q.push(); flag1[]=;dis1[]=;
while(!Q.empty())
{
int h=Q.front(); Q.pop(); flag1[h]=;
for(int i=;i<G[h].size();i++)
{
int id=G[h][i];
if(dis1[h]+val[e[id].to]<dis1[e[id].to])
{
dis1[e[id].to]=dis1[h]+val[e[id].to];
if(flag1[e[id].to]==)
{
flag1[e[id].to]=;
Q.push(e[id].to);
}
}
}
}
} void spfa2()
{
queue<int>Q;
Q.push(n); flag2[n]=;dis2[n]=;
while(!Q.empty())
{
int h=Q.front(); Q.pop(); flag2[h]=;
for(int i=;i<G[h].size();i++)
{
int id=G[h][i];
if(dis2[h]+val[e[id].to]<dis2[e[id].to])
{
dis2[e[id].to]=dis2[h]+val[e[id].to];
if(flag2[e[id].to]==)
{
flag2[e[id].to]=;
Q.push(e[id].to);
}
}
}
}
} int main()
{
scanf("%d",&T);
for(int Case=;Case<=T;Case++)
{
init();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int s,x; long long t;
scanf("%lld%d",&t,&s);
val[n+i]=t;
for(int j=;j<=s;j++)
{
scanf("%d",&x);
AddEdge(x,n+i);
}
} spfa1();
spfa2(); long long ans=INF;
for(int i=;i<=n;i++)
{
if(dis1[i]==INF||dis2[i]==INF) continue;
if(max(dis1[i],dis2[i])<ans) ans=max(dis1[i],dis2[i]);
}
printf("Case #%d: ",Case);
if(ans==INF) printf("Evil John\n");
else
{
printf("%lld\n",ans);
for(int i=;i<=n;i++)
{
if(dis1[i]==INF||dis2[i]==INF) continue;
if(max(dis1[i],dis2[i])==ans) Ans.push_back(i);
}
for(int i=;i<Ans.size();i++)
{
printf("%d",Ans[i]);
if(i<Ans.size()-) printf(" ");
else printf("\n");
}
}
} return ;
}
HDU 5521 Meeting的更多相关文章
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 5521 Meeting(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...
- HDU 5521 Meeting【最短路】
今天旁观了Angry_Newbie的模拟区域赛(2015shenyang) 倒着看最先看的M题,很明显的最短路问题,在我看懂的时候他们已经开始敲B了. 后来听说D过了很多人.. D题一看是个博弈,给了 ...
- HDU 5521 Meeting (最短路,dijstra)
题意:有N个点,两个人,其中一个人住在点1,另一个人住在点n,有M个点集,集合内的数表示任意两点的距离为dis ,现在问,如果两个人要见面, 需要最短距离是多少,有哪几个点能被当成见面点. 析:分别对 ...
- HDU - 5521 Meeting (Dijkstra)
思路: 看了好久才看懂题意,文中给了n个点,有m个集合,每个集合有s个点,集合内的每两个点之间有一个权值为t的边,现在有两个人,要从1号点,和n号点,走到同一个顶点,问最少花费以及花费最少的点. 那就 ...
- HDU 5521:Meeting(最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description Bessie and her friend E ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- Meeting HDU - 5521 虚点建图
Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farmer John ...
随机推荐
- 使用inpaint例子,去除水印
http://www.opencv.org.cn/forum.php?mod=viewthread&tid=33151 #include "stdafx.h" #inclu ...
- Java中的String[] args
在每个java程序中都有一个方法,public static void main(String[] args)方法,这个参数看了好久没看懂,但是细细看来,还是挺简单的,所有的方法的参数都是一个道理,而 ...
- 编辑器phpstrom的快捷键修改
file->setting-->查找 keymap -->查找 format 格式化代码 ctrl+alt +L appearance-->外观-->显示行号
- Entity Framework技巧系列之一 - Tip 1 - 5
提示1. 在Entity Framework中怎样排序关系(Relationships) 问题: 在Entity Framework论坛中常会看到关于排序相关联项目的问题. 例如,想象你要查询客户,并 ...
- nefu 899这也是裸的找
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; in ...
- 今天开通博客,记录我作为一个小菜鸟在iOS学习中的点点滴滴
一直以来都是默默的关注各位同仁,没有为网站作什么贡献. 现在借开始学习iOS开发的这个机会开博,集中于介绍这个过程,激励我自己. 谢谢大家!
- Sublime text 3 如何格式化HTML代码
使用Sublime text 3 编写代码是一种享受,使用Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下: 1.打开菜单->首选项->插件控制,输入 ...
- vi 使用教程
编辑一个文本文件是经常使用到的计算机操作.我们想做的大多数事情都需要使用某种文件编辑.文本编辑器会方便文件的创建和修改.编辑一个文本文件是经常使用到的计算机操作.我们想做的大多数事情都需要使用某种文件 ...
- rebar
www.cnblogs.com/panfeng412/archive/2011/08/14/2137990.html
- android-support-v7-appcompat
只要把values-v14下的styles.xml修改 用在4.0以上的设备 <!-- Base application theme for API 14+. This theme comple ...