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的更多相关文章

  1. HDU 5521 Meeting(虚拟节点+最短路)

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  2. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. hdu 5521 Meeting(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...

  4. HDU 5521 Meeting【最短路】

    今天旁观了Angry_Newbie的模拟区域赛(2015shenyang) 倒着看最先看的M题,很明显的最短路问题,在我看懂的时候他们已经开始敲B了. 后来听说D过了很多人.. D题一看是个博弈,给了 ...

  5. HDU 5521 Meeting (最短路,dijstra)

    题意:有N个点,两个人,其中一个人住在点1,另一个人住在点n,有M个点集,集合内的数表示任意两点的距离为dis ,现在问,如果两个人要见面, 需要最短距离是多少,有哪几个点能被当成见面点. 析:分别对 ...

  6. HDU - 5521 Meeting (Dijkstra)

    思路: 看了好久才看懂题意,文中给了n个点,有m个集合,每个集合有s个点,集合内的每两个点之间有一个权值为t的边,现在有两个人,要从1号点,和n号点,走到同一个顶点,问最少花费以及花费最少的点. 那就 ...

  7. HDU 5521:Meeting(最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description   Bessie and her friend E ...

  8. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  9. Meeting HDU - 5521 虚点建图

    Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farmer John ...

随机推荐

  1. 浅谈h5移动端页面的适配问题

    一.前言 昨天唠叨了哈没用的,今天说点有用的把.先说一下响应式布局吧,我一直认为响应式布局的分项目,一下布局简单得项目做响应式还是可以可以得.例如博客.后台管理系统等.但是有些会认为响应式很牛逼,尤其 ...

  2. spring管理事务需要注意的

    org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionSta ...

  3. LeetCode OJ 110. Balanced Binary Tree

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  4. springboot 打包

    springboot 打包 先clean 然后 maven package 通过命令java -jar target/GoshenWepPro-0.1.0.jar运行程序

  5. SQL Server 2008 2005删除或压缩数据库日志的方法

    由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间.由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就 ...

  6. java跳过构造方法新建对象

    Java有四种创建对象的方法: (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constr ...

  7. poi设置excel表格边框、字体等

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  8. Spring Boot 系列教程1-HelloWorld

    入门 如果你用过Spring JavaConfig的话,会发现虽然没有了xml配置的繁琐,但是使用各种注解导入也是很大的坑, 然后在使用一下Spring Boot,你会有一缕清风拂过的感觉, 真是爽的 ...

  9. PHP全选择删除功能

    <script type="text/javascript" language="javascript"> function selectBox(s ...

  10. CDockablepane风格设置

    屏蔽掉pane右上角的几个按钮 即将CDockablePane右上角的三个按钮屏蔽. 1            去掉关闭按钮 在CDockablePane的派生类中,重写方法CanBeClosed即可 ...